Quantcast
Channel: Hope This Helps
Viewing all 256 articles
Browse latest View live

PI-HOLE anzeigen geblocketer Webseiten auf Sense Hat

$
0
0
Ich hatte mal wieder Lust etwas mit dem Raspberry Pi zu basteln. Also hab ich mir ein Sense Hat besorgt und mein erstes Projekt war die geblockten Seiten von pi-hole auf der LED Matrix anzuzeigen. Grün heißt die Seite ist ok, rot sie ist geblockt.

Raus gekommen ist das hier :


Hier das Skript dazu :
#!/usr/bin/python

import tailer
from sense_hat import SenseHat
sense = SenseHat()
sense.set_rotation(180)
sense.clear()
sense.low_light = True

logfile = '/var/log/pihole.log'
searchs = '/etc/pihole/gravity.list'
pix_h = 0
pix_v = 0

def sense_pixel(pixcol):
        global pix_h
        global pix_v
        sense.set_pixel(pix_h, pix_v, pixcol)
        pix_h +=1
        if pix_h > 7:
                pix_h = 0
                pix_v +=1
        if pix_v > 7:
                pix_h = 0
                pix_v = 0

def main():
        for line in tailer.follow(open(logfile)):
                if line.find(searchs) == -1:
                        # NOT BLOCKED
                        sense_pixel([5,58,0])
                else:
                        # BLOCKED
                        sense_pixel([255,0,0])

main()


Installation Sense Hat

sudo apt-get update
sudo apt-get install sense-hat
danach einen Neustart machen

Installation tailer für python 2.X

sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install tailer


Installation tailer für python 3.X

sudo apt-get install python3-setuptools
sudo easy_install3 pip
sudo pip install tailer



Quelle : https://pythonhosted.org/sense-hat/

Nextcloud 11 : Anlegen von Benutzern über Script

$
0
0
Erstellt und getestet wurde das ganze unter Nextcloud 11, sollte aber auch mit der Owncloud funktionieren.

Problem : Wir setzten hier produktiv eine Nextcloud ein, es kommt immer wieder vor das ich einige Benutzer für Kunden oder Projekte anlegen muss. Hier ist das dann immer gleich eine Gruppe von 10 - 20 Usern. Um mir das Leben zu erleichtern habe ich ein kleines Skript geschrieben das mir eine Textdatei ausliest und Benutzer anlegt.

Lösung : Als erstes muss eine Textdatei mit den ganzen Benutzern angelegt werden. Eine Zeile = ein Benutzer. z.B. users.txt
Vorname Nachname;v.nachname;Gruppe
Vorname Nachname1;v.nachname1;Gruppe1
Vorname Nachname2;v.nachname2;Gruppe2
Auf dem System muss pwgen installiert sein. Kann unter debian mit dem Befehl installiert werden.
apt-get install pwgen
Natürlich müssen alle Variablen im Skript eurem Server angepasst werden.

Dieses Skript erstellen und ausführbar (chmod u+x skriptname) machen.
#!/bin/bash
var_datum=$(date +"%Y%m%d")
var_user_file="users.txt"
var_apache_user=www-data
var_path_nextcloud=/var/www/cloud
var_result_file="${var_datum}_user_create.txt"
while read -r line
do
var_password=$(pwgen 12 -c -n -N 1)
set -e
export OC_PASS=$var_password
var_username=$(echo "${line}" | cut -d";" -f2)
var_name=$(echo "${line}" | cut -d";" -f1)
var_group=$(echo "${line}" | cut -d";" -f3)
su -s /bin/sh ${var_apache_user} -c "php ${var_path_nextcloud}/occ user:add ${var_username} --password-from-env --group='${var_group}' --display-name='${var_name}'"
echo "Benutzer ${var_username} wurde mit Passwort ${var_password} erstellt">>"${var_result_file}"
done < $var_user_file
Wenn alles funktioniert hat müsste ein Output kommen der ca. so aussieht.

erstellen mehrer Benutzer in Nextcloud
Im Screenshot habe ich auch nochmal den Aufbau für die Demo mit cat ausgegeben. (Zeile 2)

Danach findet ihr eine Datei DATUM_users_created.txt in der alle Benutzer mit Password aufgeführt sind.

Leider ist es noch nicht möglich (Stand 03/17) Benutzer mit E-Mail Adresse zu hinterlegen hier muss dann entweder noch ein sql query abgefeuert werden oder manuell im Backend nachpflegen.

Mehr Informationen zu occ : Using OCC Command on Nextcloud 11

pdftk : bearbeiten von PDF Dateien

$
0
0
Es gibt zwar schon tausende von Einträge zu diesem Thema dennoch schreibe ich jetzt mal was zu pdftk was mir in der Shell immer gute Dienste leistet. Ich hatte gerade wieder die Anforderung eine PDF zu verkleinern und zu drehen, sicher man könnte sich irgendeine GUI Sache auf die Kiste laden die das macht, aber warum es gibt doch pdftk;-)

Hier kann man pdftk für Windows downloaden , bei Linux ist PDFTk meist über Repository verfügbar.

Debian
apt-get install pdftk

OpenSuse
zypper install pdftk


Beispiele :

Seiten drehen mit pdftk von Seite 1 bis Ende um 90°
pdftk input.pdf cat 1-endwest output out.pdf


Seiten drehen mit pdftk von Seite 1 bis 3 90° drehen den Rest so mit rein
pdftk input.pdf cat 1-3west 3-end output out.pdf


Seiten um 180° drehen
pdftk input.pdf cat 1-endsouth output out.pdf


Wie man Formulare ausfüllt habe ich hier erklärt : PDFtk - PDF Formulare automatisch befüllen

Mehr Informationen zu pdftk : pdftk - cli examples

symbolische links setzen unter Windows & Linux

$
0
0
Jeder Admin wird sich jetzt denken "was soll das denn nun ?" aber trotzdem schreibe ich hier mal etwas zu diesem Thema.
Es dient auch mir als kleiner Spicker :-)

In beiden Beispielen wird die letzte Version eines Ordners im root Ordner mit latest verlinkt.

Unter Linux ist es möglich sogenannte Links zu setzen. Die verhalten sich wie normale Ordner bzw Dateien liegen aber eigentlich an einem anderen Ort im Dateisystem. Somit kann man einfach z.B. das Storage einer Owncloud auf einen NFS Share legen oder, was auch gerne gemacht wird, immer auf die letzte Version einer Datei linken. Der Aufruf dazu ist
ln -s Zielverzeichnis Linkname
löschen kann man den link mit dem Befehl
rm Linkname

ln linux

Das selbe verhalten kann man auch unter Windows mit mklink nachvollziehen. Das rettet einem manchmal den Tag wenn z.B. der Benutzer die Länge von 256 Zeichen überschritten hat. Dann steigt man tiefer ein und kann die Datei umbenennen oder eben ein Backup durchführen. Früher habe ich dafür immer subst verwendet, das werden jetzt die Windows Admins kennen ;-)
Link setzen mit Windows (cmd als Admin)
mklink /D Linkname Zielverzeichnis
Achtung die Parameter sind im Vergleich zu Linux verdreht, passiert mir jedesmal deswegen die Warnung.
Mit dem folgenden Befehl kann man einen Link auf einen Ordner / eine Datei löschen
rmdir Linkname

mklink windows

Kleiner Tipp :
Was man unter Windows damit auch machen kann ist Spiele von Steam, Uplay oder Origin auf eine andere HDD zu schieben.


Informationen zu der Befehlszeile :
technet.microsoft.com - mklink erklärt
wiki.ubuntuusers.de - ln erklärt
technet.microsoft.com - subst erklärt

Linux Mint 18 : Pulse Audio aufzeichen

$
0
0
Mit diesem Skript ist es möglich eine beliebige Quelle von Pulse Audio aufzuzeichnen.
Ich habe das Skript unter Linux Mint 18 erstellt und getestet.
Es müssen die vorbis-tools installiert sein dies kann so erledigt werden !
apt-get install vorbis-tools
Hier das Skript :
#!/bin/bash
RED=$(tput setaf 1)
YELLOW=$(tput setaf 3)
WHITE=$(tput setaf 7)
NORMAL=$(tput sgr0)
if [[ ${#} -lt 1 ]]
	then
		echo ""
		echo ""
		echo "${WHITE}Bitte den PulseAudio Index angeben !!"
		count=$(pacmd list-sink-inputs | grep -E 'index:' | wc -l)
		if (( $count > 0 ));then
			echo "${YELLOW}_____________________________________________________________________"
			echo ""
			echo "Alle Pulseaudio Sinks werden angezeigt"
			echo "_____________________________________________________________________${RED}"
		    echo ""
			pacmd list-sink-inputs | grep -E 'index:|client:'
			echo "${YELLOW}_____________________________________________________________________"
		else
			echo "${YELLOW}_____________________________________________________________________"
		    echo ""
			echo " Wenn keine Musik läuft kann kein Sink ermittelt werden"
			echo "_____________________________________________________________________${NORMAL}"
		    echo "Bitte Skript neu starten NACHDEM die Musik gestartet wurde !"
			exit 1
		fi
		echo -n "Bitte den Index wählen : "
		read inp0
		INDEX=$inp0
	else
		INDEX=$1
	fi
if [[ ${#} -lt 2 ]]
	then
		echo "${WHITE}Bitte den Zielpfad & Namen angeben OHNE LEERZEICHEN mit ogg am Ende !${NORMAL}"
		read inp1
		FILE="$inp1"
	else
		FILE="$2"
	fi
pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o $FILE --raw -


Windows 10 : Installation Stop - 0xc000021a - HP Elitebook 8560w

$
0
0
Problem : Man möchte bei einem älteren Notebook (HP Elitebook 8560w) eine sauber Neuinstallation des Systems mit Windows 10 durchführen. Die Installation läuft sauber durch jedoch tritt nach dem Neustart der Stillstandcode 0xc000021a auf.

Lösung : Das Bootmedium das ich hier hatte war eine ältere Version 1607 auch hatte mein Notebook schon länger kein Bios Update gesehen. Solltet ihr ein anderes Notbook Modell haben schaut mal nach neuen BIOS / UEFI Versionen.

Nach dieser Vorgehensweise hab ich dann Windows 10 auf die Kiste bekommen.

1.) HDD komplett genullt (um bootloader zu entfernen)
2.) Update des Bios auf F.61
3.) Über dem Media Creation Tool von Microsoft das aktuellste Image besorgt (*.iso)
4.) Installation über DVD, nicht über USB das hat bei mir nicht geklappt
5.) Glücklich sein und Treiber suchen :-)

Windows 10: Standarddrucker ändert sich ständig ungewollt

$
0
0
Problem:
Windows 10 ändert den Standarddrucker selbstständig auf einen anderen Drucker!

Ursache:
Windows 10 verwaltet die Druckersteuerung intern und verändert den Standarddrucker nach den Druckgewohnheiten des Benutzers. Wenn man einige Zeit auf einen anderen Drucker druckt, dann wird dieser zum Standarddrucker gesetzt.

Lösung:
ICH WILL DAS NICHT! Genau, dann können sie dies entweder über Registry oder manuell anpassen:

Manuell:
Windows-Einstellungen (nicht Systemsteuerung!) -> Geräte -> Drucker & Scanner ->"Standarddrucker von Windows verwalten lassen" -> AUS

Registry:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
DWORD -> LegacyDefaultPrinterMode -> Value:1

WICHTIG:
Wenn Sie die UAC einsetzen, dann reicht das noch nicht, sondern Sie müssen noch zusätzlich diese Werte setzen (Windows-eigene Benutzer-SIDs):
HKEY_USERS\S-1-5-19\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
DWORD -> LegacyDefaultPrinterMode -> Value:1

HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
DWORD -> LegacyDefaultPrinterMode -> Value:1

Quelle:spiceworks: Default Printer Keeps Switching to Adobe PDF on Windows 10

Exchange 2013: 451 4.7.0 Temporary server error. PRX5

$
0
0
Problem:
Ab und zu gibt der Exchange 2013 folgenden Fehler beim Empfangen von Mails zurück:
451 4.7.0 Temporary server error. Please try again later. PRX5

Ursache:
Scheinbar gibt es hier DNS-Probleme, wenn der Server seine interne Struktur auflösen will.
Genau habe ich das Problem noch nicht vollständig analysieren können.

Lösung:
Hier gibt es zwei einfache Lösungsansätze:

1.)Anpassen des DNS-Lookups am Exchange
- Öffnen Sie die ECP-WEbsite und navigieren Sie zu "Server" ->"Server" ->"DNS-Lookups"
- Stellen Sie hier explizit die richtige Netzwerkkarte ein, über die der Exchange mit dem LAN verbunden ist (Default: Alle Netzwerkkarten)
- Tragen Sie hier Ihre internen DNS-Server vollständig ein


2.) Eintrag in HOSTS-Datei
- Öffnen Sie die HOSTS-Datei und tragen Sie hier den FQDN und NetBIOS-Namen Ihres Exchange-Servers mit der richtigne IP-Adresse ein


Nach den Änderungen müssen Sie folgende Exchange-Dienste neu starten:
- Microsoft Frontend Transport
- Microsoft Exchange Transport

Erste danach ziehen die neuen Einstellungen.
Ich konnte den Fehler so beheben (bis jetzt zumindest!)

Quelle: support.everycloudtech.com: 451 4.7.0 Temporary server error. Please try again later. PRX5

Dropbox: Download Offline Installer Package

Bash : Pfad des eigenen Skripts ermitteln

$
0
0
Wenn man den Pfad des Bash Skriptes ermitteln möchte das gerade gestartet ist reicht diese Variable

# eigener Pfad
basepath=$(dirname $(readlink -f ${0}))

Bash : Parameter sauber an Skript übergeben

$
0
0
Parameter sauber an Skript übergeben mit getopts.

# definiere mögliche Parameter
# ------------------------------------------------

while getopts s:f:h opts; do
        case ${opts} in
                s) var1=${OPTARG} ;;
                f) var2=${OPTARG} ;;
                h) show_help ;;
        esac
done


Erklärung :
In diesem Beispiel gibt es 3 Parameter s,f und h , wenn -s angegeben wird muss ein Inhalt folgen. Also script.sh -s wirft den Fehler aus
Diese Option erfordert ein Argument -- s
das selbe würde auch auftreten wenn f ohne Inhalt angegeben wird. Das wird definiert indem bei getopts ein : hinter dem parameter steht (s:f:) bei h steht kein : hinter dem Buchstaben somit wird dieser Parameter leer aufgerufen also nur mit -h.

you want to know more :
mkssoftware.com docs getopts
wiki.bash-hackers.org - howto - getopts_tutorial

Bash : Folder an ein Array übergeben

$
0
0
Alle Unterordner eines Ordners durchnummeriert anzeigen.

path=/home
array=()
while IFS= read -r -d $'\0'; do
        array+=("$REPLY")
done <<(find ${path} -maxdepth 1 -type d ! -name '.*' ! -wholename ${path} -print0 )
cnt=1
for item in "${array[@]}"
do 
        echo "${cnt}) -> ${item}"
        ((cnt++))
done

VB.NET 2015 : Vorlagen Manager für Office Anwendungen

$
0
0
Ich habe mal wieder eine kleine Fingerübung in VB.NET gemacht, rausgekommen ist ein Vorlagen Manager für alle Arbeitsgruppen Vorlagen unabhängig von der Anwendung. Ob das Sinn macht oder nicht ist egal es war mal wieder eine gute Übung für mich. Wenn man zur Laufzeit Elemente erstellen möchte gibt es einiges zu beachten. In meinem Beispiel erstelle ich eine TabPage im TabControl und füge ein ListView Element hinzu.

Formular
Vorlagen_Manager

Benötigt
Imports System.IO
Deklaration für den Pfad in der Klasse:
Dim varPath As New DirectoryInfo("pfad zu den Arbeitsgruppen Vorlagen")
Sub für das erstellen zur Laufzeit :
Private Sub AddTabPage()
    Dim tempPage As TabPage
    Dim LView As ListView
    For Each oSubDir As DirectoryInfo In varPath.GetDirectories
        tempPage = New TabPage(oSubDir.Name)
        LView = New ListView()
        With LView
                .Dock = DockStyle.Fill
                .View = View.Details
                .Name = "lvw_"& oSubDir.Name
                .GridLines = True
        End With
        tempPage.Controls.Add(LView)
        AddHandler LView.DoubleClick, AddressOf OpenFile_DoubleClick
        AddHeader(LView)
        If oSubDir.GetFiles.Count > 0 Then
                tab_ctl.TabPages.Add(tempPage)
                GetFilesFromFolder(oSubDir, LView)
        End If
    Next
End Sub
Um das erstellte Listview auch mit einem onKlick oder wie in meinem Fall DoppelKlick zu versehen wird AddHandler benötigt.
Dieser verweist in meiner Sub auf die Funktion OpenFile_DoubleClick
Private Sub OpenFile_DoubleClick(ByVal sender As Object, ByVal e As EventArgs)
        Dim lv As ListViewItem = CType(sender, ListView).FocusedItem
        Dim App As String = UCase(lv.SubItems(1).Text.ToString)
        Dim Template As String = lv.SubItems(2).Text.ToString
        Dim var_proc_start As String
        Select Case App
            Case "WO"
                var_proc_start = "winword.exe"
            Case "EX"
                var_proc_start = "excel.exe"
            Case "PP"
                var_proc_start = "powerpnt.exe"
            Case Else
                var_proc_start = Nothing
        End Select
        If Not (var_proc_start Is Nothing) Then
            Process.Start(Chr(34) & OfficePfad & var_proc_start & Chr(34), "/N "& Chr(34) & Template & Chr(34))
        End If
    End Sub
Hier werden die Header für das ListView Element geschrieben
Private Function AddHeader(ByVal Lstview As Object)
  Dim HEAD1, HEAD2, HEAD3 As ColumnHeader
  HEAD1 = New ColumnHeader
  HEAD2 = New ColumnHeader
  HEAD3 = New ColumnHeader
  With HEAD1
          .Text = "Vorlage"
          .TextAlign = HorizontalAlignment.Left
          .Width = 650
  End With
  With HEAD2
          .Text = "Typ"
          .TextAlign = HorizontalAlignment.Center
          .Width = 50
  End With
  With HEAD3
          .Text = "Pfad"
          .TextAlign = HorizontalAlignment.Left
          .Width = 5
  End With
  With Lstview
          .Columns.Add(HEAD1)
          .Columns.Add(HEAD2)
          .Columns.Add(HEAD3)
  End With
End Function
Datei Typ ermitteln :
Private Function Get_File_Type(ByVal File As FileInfo)
        Dim FTYPE As String
        Select Case File.Extension
            Case ".dotx"
                FTYPE = "WO"
            Case ".xltx"
                FTYPE = "EX"
            Case ".potx"
                FTYPE = "PP"
            Case Else
                FTYPE = "NA"
        End Select
        Return FTYPE
    End Function
Dateien in das Listview Element eintragen :
Private Sub GetFilesFromFolder(ByVal Folder As DirectoryInfo, ByVal oLiVi As Object)
        For Each File As FileInfo In Folder.GetFiles
            If File.Name.Substring(0, 1) = "~" Then
                Exit Sub
            End If
            Dim Item As New ListViewItem(File.Name)
            Item.SubItems.Add(Get_File_Type(File))
            Item.SubItems.Add(File.FullName)
            oLiVi.Items.Add(Item)
        Next
    End Sub
Form Load :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   AddTabPage()
End Sub


Es gibt bestimmt schönere Weg oder auch andere die besser wären, wenn das so ist schreibts mir in die Kommentare. Ich bin bis jetzt zufrieden es funktioniert ;-)


python : Key Press Event

$
0
0
Man möchte in einem Python Script einen Key Event abfangen. Das geht recht gut über curses

Beispiel :
#!/usr/bin/env python

import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)

stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()

key = ''
while key != ord('q'):
    key = stdscr.getch()
    stdscr.addch(20,25,key)
    stdscr.refresh()
    if key == curses.KEY_UP: 
        stdscr.addstr(2, 20, "Up")
    elif key == curses.KEY_DOWN: 
        stdscr.addstr(3, 20, "Down")

curses.endwin()


Hier gefunden :
stackoverflow.com - allyourcode
Referenz - Python 3.5 - curses

VMWare: Windows Server Installation von Fujitsu ROK Lizenz auf VMWare 6

$
0
0
Problem:
Ich habe versucht meine Windows 2012 R2 Standard ROK Lizenz unter VMware 6 zu installieren. Dabei bin ich gleich am Anfang auf eine Meldung gestoßen, dass diese Version nur mit Fujitsu Servern funktioniert:

"This installer is designed to load only in virtual environments supported by Fujitsu and/or the virtual maschine provider."



Da meine ESX-Host Fujitsu-Server sind, habe ich nach einer Möglichkeit gesucht, die BIOS-Informationen in die VM durchzureichen.
Der Eintrag SMBIOS.reflectHost = "TRUE" hat nichts gebracht.

Lösung:
Das Problem ist, dass man bei VMware 6 bzw. System ab Server 2008R2 noch zwei zusätzliche Parameter in der VM eingeben muss. Ich habe folgende Parameter in die VM-Einstellungen konfiguriert und konnte damit meine ROK erfolgreich installieren und aktivieren:
SMBIOS.reflectHost = "TRUE"
SMBIOS.noOEMStrings = "TRUE"
smbios.addHostVendor = "TRUE"

Die Parameter trägt man nicht direkt in die vmx-Dateien ein, sondern kann diese ganz einfach in den Einstellungen der VM eintragen. Dazu folgende Anleitung:
1. VM-Einstellungen bearbeiten
2. Reiter "VM-Optionen" auswählen
3. Erweitert auswählen
4. Button "Konfiguration bearbeiten"
5. Hier die drei zusätzlichen Parameter hinzufügen
6. Alles mit OK bestätigen
7. Maschine starten und ROK-Lizenz installieren

Quelle:VMs mit ROK Key installieren

ActiveDirectory: Sicheres Schema-Update (ADPREP) mittels Replikations-Pause

$
0
0
Vorgehenweise um ein sicheres ActiveDirectroy-Schema-Update durchzuführen

Viele haben bestimmt schon ein ActiveDirectory-Schema-Update durchgeführt, ohne sich der Risiken bewusst zu sein, oder diese zu ignorieren. Ich hatte vor kurzem das erste Mal einen Stromausfall bei einem Schema-Update - glücklicherweise in einer Demo-Umgebung. Das Schema war danach zerstört und hatte sich aber beim Neustart der Server bereits repliziert - ActiveDirectory komplett zerstört, nur noch Fehlermeldungen beim Zugriff auf Objekte!
Um das zu verhindern, habe ich mir eine Anleitung zusammengebaut, in der ich wie folgt vorgehe:

1.) Verzeichnis-Replikation auf dem Schemamaster deaktivieren
2.) ADPREP durchführen
3.) Testen des Zugriffs auf die AD (ActiveDirectory-Benutzer und -Computer)
4.) Verzeichnis-Replikation wieder aktivieren
5.) Test der ActiveDirectory

Dazu gehe ich wie folgt vor:

1.) Schemamaster finden
Dazu verwende ich den Befehl "netdom query fsmo" und schau, welcher DC der Schemamaster ist

2.) Aktuelle Schema-Version ermitteln
Hierzu verwende ich auf dem Schemamaster den Befehl DSQUERY.
Hier ein Beispiel für die Domäne DEMO.LOCAL
dsquery * CN=Schema,CN=Configuration,DC=DEMO,DC=LOCAL -Scope Base -attr objectVersion

Kleiner Tipp, falls es sich um ein Exchange-Schema-Update handelt - mit diesem Befehl kann ich die Exchange-Version des Schemas auslesen:
dsquery * CN=ms-Exch-Schema-Version-Pt,cn=schema,cn=configuration,dc=DEMO,dc=INTERN -scope base -attr rangeUpper


3.) Verzeichnis-Replikation auf dem Schemamaster deaktivieren
Hierzu verwendet ich die den Befehl "repadmin" um die eingehende und ausgehende Replikation zu deaktivieren:
(SCHEMAMASTER-NAME muss angepasst werden)

repadmin /options SCHEMAMASTER-NAME +DISABLE_OUTBOUND_REPL
repadmin /options SCHEMAMASTER-NAME +DISABLE_INBOUND_REPL

Danach findet man im Ereignisprotokoll die Ereignisse 1113 und 1115, die darauf hinweisen, dass eingehende und ausgehende Replikation vom Benutzer deaktiviert wurde (Ereignisprotokoll VERZEICHNISDIENST)


4.) Schema-Update durchführen
Jetzt führt man das Schema-Update durch mittels diesen drei Befehlen:
adprep /forestprep
adprep /domainprep
adprep /rodcprep


Im Ereignis-Protokoll werden die Aktualisierungen auch mit protokolliert:


5.) Prüfen der neuen Schema-Version
Nun kann man mittels DSQUERY-Befehl prüfen, ob die neue Schema-Version vorliegt
dsquery * CN=Schema,CN=Configuration,DC=DEMO,DC=LOCAL -Scope Base -attr objectVersion
Als Test dann man sich mal auf einen anderen DC einloggen und den Befehl ebenfalls durchführen.
Hier wird man sehen, dass die Schema-Version noch die alte Version ist, da die Replikation nicht aktiv ist!

6.) Testzugriff auf die AD auf dem Schemamaster
Öffnen Sie einige AD-Konsolen auf dem gerade aktualisieren Schemamaster und klicken Sie sich durch, ob es zu Fehlermeldungen kommt. Wenn alles in Ordnung ist, dann können Sie die Replikation wieder aktivieren.

7.) Replikation wieder aktivieren und das Schema global aktualisieren

Starten Sie auf dem Schemamaster mittels der nachfolgenden Befehle wieder die ein- und ausgehende Replikation:

repadmin /options SCHEMAMASTER-NAME -DISABLE_OUTBOUND_REPL
repadmin /options SCHEMAMASTER-NAME -DISABLE_INBOUND_REPL


Das Aktivieren der Replikation wird ebenfalls wieder im Ereignisprotokoll angezeigt:



8.) Prüfen der neuen Schema-Version
Starten Sie die Replikation der DCs manuell oder warten Sie den Zyklus ab. Danach prüfen Sie auf allen bestehenden DCs, ob das Schema übernommen wurde mittels des vorherigen DSQUERY-Befehl.

9.) FERTIG!

Damit haben Sie eine risikoarme Schema-Erweiterung durchgeführt und minimieren das Risiko, dass die ActiveDirectory beschädigt wird.

Quellen für die Hilfestellung:
Directory Services: Upgrading AD DS Schema to Windows Server 2016
ANTARY: Active Directory Schema Version herausfinden




Server 2016: Aufgabenplanung führt Aufgaben nicht aus, wenn erste Startzeit in der Vergangenheit liegt!!

$
0
0
Problem:
Ich habe mich an den ersten Server 2016 Systemen versucht und bin gleich auf einen Bug in der "Aufgabenplanung" gestolpert.
Das Problem ist, dass ich versucht habe mehrere Aufgaben zu bestimmten Zeiten laufen zu lassen (Robocopy etc.)
Ein manuelles Starten des Tasks lief problemlos. Aber die Jobs wurden, beim erreichen der geplanten Zeit, nicht ausgeführt!
Nach langer Suche bin ich tatsächlich auf mehrere englische Foreneinträge gestoßen, die hier das gleiche Problem beschreiben.

Wenn Uhrzeit und Datum der ERSTEN Ausführung in der Vergangenheit liegen, dann läuft der Task nicht, wird aber immer wieder neu eingeplant - nur nicht ausgeführt! Man sieht auch, dass sich das Datum der letzten Ausführung nicht ändert!

Lösung:
Gegenwärtig (03.04.2017) habe ich hierfür keine Lösung gefunden!
Es gibt einen Workaround, dass man das Datum manuell in die Zukunft legt und dann läuft der Task auch - bis zum nächsten Neustart des Server - dann tritt das Problem wieder aus. Also wieder alle Tasks in die Zukunft verlegen und dann läuft das !
Ich werde mich erst Mal mit einem Server 2012 R2 begnügen, da das Problem hier nicht auftritt!

Quelle der Recherche:
serverfault: Task Scheduler in Server 2016 Datacenter Edition Doesn't Run Automatically
serverfault: Windows Server 2016 scheduled task schedule must be in future

Microsoft BitLocker: Ständige Frage nach Recovery-Key nach BIOS-Update

$
0
0
Problem:
Ich habe ein BIOS-Update bei einem Bitlocker-geschütztem System durchgeführt (sehr leichtsinnig!) und nun verlangt Windows immer den sehr, sehr langen Recovery-Key.

Lösung:
Manchmal ist man ja etwas leichtsinnig und ich habe beim BIOS-Update überhaupt nicht an Bitlocker gedacht...hmmm!

Korrekte Vorgehensweise um ein BIOS-Update bei Bitlocker durchzuführen wäre:
1.) Systemsteuerung > System und Sicherheit > Bitlocker-Laufwerksverschlüsselung
2.) Hier wählt man "Schutz anhalten" (NICHT DEAKTIVIEREN)
3.) Nun kann man das BIOS-Update durchführen
4.) Nach dem Update aktiviert man den Schutz wieder
5.) Fertig

Was macht man, wenn man das vergessen hat?
1.) Man startet den Rechner und gibt den Recovery-Schlüssel (Vorher hoffentlich gesichert?!)
2.) Nun hält man den Schutz ebenfalls an, wie oben beschrieben
3.) Nun aktiviert man den Schutz wieder und damit ist alles gut!
4.) Fertig - nach einem Neustart ist alles beim Alten!

Quelle der Recherche:
Winboard: BitLocker: BIOS-Update - "suspend" vergessen

Jenkins : Nach Update Fehler 503

$
0
0
Problem : Nach einem Update des Jenkins Servers erhält man nur noch einen Fehler 503 mit dem Hinweis "Service Unavailable"
jenkins error 503
Lösung : Bei mir war der Grund eine veraltete JAVA SDK diese lag noch in Version 7 vor, für das aktuelle Jenkins wird JAVA SDK 8 benötigt.
Abfragen der aktuell installierten Versionen :
dpkg -l | grep oracle-java
Also mal schnell java 8 installiert und alles hat wieder funktioniert.

java 8 unter debian 8 installieren : how-to-install-oracle-java-8-in-debian

ActiveDirectory: Wie ändere ich die IP-Adresse eines Domänen Controllers

$
0
0
Problem:
Ich musste die IP eines Domänen-Controllers ändern, da ich einen brandneuen Server 2016er DC aufgesetzt habe, aber keine Lust hatte an allen Druckern, DHCP-Scopes etc. die DNS-IP-Adressen anzupassen.

Lösung:
Eigentlich ist das Ändern relativ einfach, jedoch muss man der AD etwas Zeit geben, bis die Replizierung von AD und DNS durch ist. Folgende Schritte habe ich zur Änderung durchgeführt:

1.) Überprüfen Sie die korrekte Funktion der ActiveDirectory VOR der Umstellung (Replikation, dcdiag)
2.) Ändern Sie die IP-Adresse des betroffenen Domänen-Conmtrollers
3.) Führen Sie ein "ipconfig /registerdns" durch um die DNS-Änderungen zu aktualisieren
4.) Führen Sie ein "ipconfig /flushdns" durch um gecachte DNS-Einträge zu verwerfen
5.) Fühbren Sie ein "dcdiag /fix" durch um SPN-Einträge zu korrigieren
6.) WICHTIG: 5 Minuten nichts machen bis alle DNS/DC die neue IP haben (IT-Kaffee-Hol-Regel)
7.) Im DNS prüfen, ob alle Einträge richtig und nur noch die neuen IPs zu finden sind
8.) Auf allen DCs ein "ipconfig /flushdns" durchführen und den DNS-Cache an den DNS-Servern löschen.
8.) ActiveDirectory prüfen mittels Replikation und dcdiag etc.
9.) WICHTIG: Auf allen laufenden, wichtigen Servern (Exchange, SQL etc.) ein "ipconfig /flushdns" ausführen um die veralteten DNS-Einträge zu löschen - sonst kommt es zu eigenartigen Fehlermeldungen
10.) OPTIONAL: DHCP-Einstellungen anpassen, falls sich DNS-Server auch geändert haben
11.) Fertig! Nächster Kaffee...

Falls man, wie ich, zwei DCs ändern muß (alten DC auf neue IP und neuen DC auf alte IP), sollte man immer zwischen den Änderungen Zeit einplanen, damit die AD alles mitbekommt!
Viewing all 256 articles
Browse latest View live