Kategorieauswahl

Script

Einfache Powershell-Befehle für den Active Directory Papierkorb und eine GUI

Hier ein kleines Powershellscript, dass die Powershell um einfache Befehle für die Verwaltung und Einrichtung des Active Directory Papierkorbs erweitert (sollte der Downloadlink nicht angezeigt werden, klicken Sie bitte auf die Überschrift des Artikels):

AD-Papierkorb-Cmdlets

Um den AD-Papierkorb zu aktivieren muss das Script als Organisationsadministrator ausgeführt werden, da nur dieser berechtigt ist im gesamten Forest den Papierkorb zu aktivieren. Dieses Feature kann nicht auf Domänenebene aktiviert werden. Der Forestlevel muss auf 2008 R2 hochgestuft sein. Falls Sie befürchten, dass irgendwelche schädlichen Aktionen im Script versteckt sind, schauen Sie einfach hinein, oder lassen Sie es von jemand überprüfen der sich damit auskennt.

Wurde der Papierkorb bereits aktiviert, kann das Script zukünftig auch als Domänenadministrator aufgerufen werden.

Das Script selbst schafft zunächst nur die Voraussetzungen für die Befehle, damit diese auf der aktuellen Maschine in der aktuellen Domäne ausgeführt werden können und baut die Befehle als Funktion in Ihre aktuell laufende Powershell ein. Wenn Sie die aktuelle Powershell Konsole schließen sind die Befehle auch schon wieder vergessen. Sie müssen also jedes mal das Script starten, bevor Sie auf die Befehle zugreifen können. Selbstverständlich dürfen Sie das Script auch verändern, damit es zukünftig zu Ihrem Standardbefehlssatz gehört.

Der Papierkorb kann nur Objekte wiederherstellen, die nach seiner Aktivierung gelöscht wurden. Die Befehle können alle Objekte wieder herstellen, also nicht nur Benutzer ,Gruppen OUs und Computer.

Hier nun die 3 einfachen Befehle zur Verwaltung des Papierkorbs die sich automatisch an die Domäne in der Sie sich angemeldet haben anpassen:

Start-RecycleBin

Achtung! Ist der Papierkorb aktiviert, kann diese Funktionalität (generell – auch über die Standardwerkzeuge) nicht mehr zurückgezogen werden.

Einfach nur eintippen und der Papierkorb wird aktiviert. Ggf. fragt das Script noch ein paar Dinge ab. Auf jeden Fall informiert der Befehl darüber ob der Papierkorb aktiviert ist.

Show-DeletedADObjects

Aufruf auch hier ohne weitere Parameter. Zeigt alle sich derzeit im Papierkorb befindlichen Objekte an.

Restore-DeletedADObjects Suchbegriff

Dieser Befehl holt gelöschte Objekte aus dem Papierkorb zurück. Geben Sie den Befehl gefolgt von einem Suchbegriff ein. Der Suchbegriff verarbeitet keine Platzhalterzeichen wie z.B. ein *. Dies wird automatisch im Script vor und nach dem Suchbegriff eingesetzt. Sollten Sie nicht wissen was Sie gelöscht haben, können Sie sich mit Show-DeletedADObjects einen Überblick über den Inhalt des Papierkorbs verschaffen.

Wenn Sie eine komplette OU gelyncht haben, können Sie einfach den Namen der OU angeben. Alle enthaltenen Objekte werden automatisch mit angezeigt.

Der Befehl stellt nicht einfach alles wieder her was dem Suchbegriff entspricht, sondern listet erst einmal alles was er zum Suchbegriff findet und fragt dann nach ob er die Objekte wiederherstellen soll. Dies beantworten Sie dann mit Ja oder Nein.

Grafische Oberfläche für den AD-Papierkorb mittels Powershellscript:

Wenn Sie zu den Mausschubsern gehören, können Sie auch das folgende Powershellscript nutzen um per GUI (grafischer Oberfläche) den AD-Papierkorb zu verwalten:

AD-Recyclebin-Tool

Vorteile des Scripts:

  • Multiple Domain tauglich
  • Löschzeitraum kann angegeben werden
  • Schneller als so manche kommerzielle .EXE Datei
  • Kann mit etwas Glück sogar Objekte restaurieren, die vor Aktivierung des Papierkorbs gelöscht wurden.

GUIADRecycleBin

 

 

 

Das ZIP-Archiv ist in einen Ordner Ihrer Wahl zu entpacken. Darin enthalten sind ein paar Icons und das Script selbst. Einfach nur das Script ohne Parameter starten.

Der Einsatz der Scripte für den AD Papierkorb ist auch für den gewerblichen Einsatz kostenfrei. Gegen eine Spende (siehe PowerShell-Buch) habe ich aber sicher nichts einzuwenden ;-). Eine Haftung bei evtl. auftretenden Schäden wird nicht übernommen. Verbesserungsvorschläge nehme ich gerne über Kommentare oder das Kontaktformular entgegen.

Terminalserverprofilepath mittels Powershell abfragen

Benutzer aus dem AD (Active Directory) mit Powershell auszulesen ist nicht besonders schwierig. Alles was man dazu braucht ist entweder einen DC (Domänencontroller) oder einen Client mit installiertem AD-Modul für Powershell aus den RSAT (Remote-Server-Administration-Tools) und natürlich die Powershell Version 2.0 oder höher.

Mit dem Befehl get-aduser Benutzername erhält man aber nur einen kleinen Teil der Benutzereigenschaften. Wenn Sie mal richtig aufdrehen wollen (alle Eigenschaften haben) müssen Sie erst noch einmal etwas nachhelfen: get-aduser Benutzername -properties *. Leider ist der Pfad, den mal eventuell im Terminalserver bzw. Remotedesktopdienste -Profilepfad angegeben hat dort nicht wirklich auszulesen. Es gibt im LDAP zwar extra das Attribut msTSProfilePath doch legt Microsoft dort überhaupt nichts ab!!! Der Profilepfad ist im Attribut userParameters mit viel anderem Krempel leider codiert hinterlegt. Nichts desto trotz kann man hier wenigstens feststellen ob der TS Profilpfad beim Benutzer angegeben wurde, oder nicht. Das unten aufgeführte Script sollte weiter helfen. Wünschen Sie Verbesserungen/Anpassungen hinterlassen Sie einen entsprechenden Kommentar.

 

function SetTSProperties()
{
 $ou = [adsi]"LDAP://ou=mytestou,dc=nwtraders,dc=com"
 $user = $ou.psbase.get_children().find($userDN)
 $user.psbase.invokeSet("allowLogon",1)
 $user.psbase.invokeSet("TerminalServicesHomeDirectory",$hDirValue)
 $user.psbase.invokeSet("TerminalServicesProfilePath",$ppValue)
 $user.psbase.invokeSet("TerminalServicesHomeDrive",$hdValue)
 $user.setinfo()
} #end SetTSProperties
function QueryTSProperties()
{
 $ou = [adsi]"LDAP://ou=mytestou,dc=nwtraders,dc=com"
 $user = $ou.psbase.get_children().find($userDN)
 foreach($property in $aryTSProperties)
 {
  "$($Property) value: $($user.psbase.invokeget($Property))"
 } #end foreach
} #end QueryTSProperties
$userDN = "CN=My User"
$hDirValue = "\\Hamburg\TSUsers\Home\TestUser"
$hdValue = "t:"
$ppValue = "\\Hamburg\TSUsers\Profiles\TestUser"
$aryTSProperties="allowLogon","TerminalServicesHomeDirectory",
  "TerminalServicesHomeDrive","TerminalServicesProfilePath"
SetTSProperties
queryTSProperties

Shellscripte und Perl auf dem KDE 4 Desktop ausführen lassen

Damit Shellscripte (bei Bash z.B. Dateien mit der Endung .sh) beim Anklicken auf dem Desktop nicht zum Bearbeiten geöffnet werden, sondern ablaufen müssen Sie das Programm systemsettings (klick auf Systemeinstellungen) aufrufen. Dort findet man gleich in der ersten Reihe den Eintrag Dateizuordnungen. Unter application finden Sie den Eintrag x-shellscript. Bei Rangfolge der zugeordneten Anwendungsprogramme klicken Sie auf Hinzufügen und geben Sie /bin/bash in die weiße Zeile ein. Bestätigen Sie mit OK. Mit dem Nach oben Knopf sorgen Sie nun noch dafür, dass das öffnen mit der Bash bevorzugt geschieht.

Genauso gut können Sie das natürlich auch mit Perl machen. Nur statt x-shellscript wählen Sie den Knoten x-perl aus und statt /bin/bash tragen Sie /usr/bin/perl ein.

Bibliotheken in Windows 7 abschalten und wiederherstellen

Bibliotheken in Windows 7 sind ein Graus. Ab und zu gehen die auch einmal kaputt mit einer Meldung wie „Pictures.library-ms kann nicht länger ausgeführt werden.“. Da hilft nur ein Rechtsklick auf die Bibliothek und auswählen von löschen (keine Panik – damit löschen Sie nicht Ihre Dateien). Dann einen Rechtsklick auf Bibliotheken im Explorer und wählen Sie „Standardbibliotheken wiederherstellen“. Danach können Sie Ihre Ordner wieder der Bibliothek hinzufügen. Ich persönlich schlate Sie lieber gleich komplett ab. Wie das geht lesen Sie ab hier:

Hier ein REG-Script zum Abschalten der Bibliotheken (Libraries) im Explorer:

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{031E4825-7B94-4dc3-B131-E946B44C8DD5}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{2112AB0A-C86A-4ffe-A368-0DE96E47012E}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{491E922F-5643-4af4-A7EB-4E7A138D8174}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7b0db17d-9cd2-4a93-9733-46cc89022e7c}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{A302545D-DEFF-464b-ABE8-61C8648D939B}]

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{A990AE9F-A03B-4e80-94BC-9912D7504104}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]“{031E4825-7B94-4dc3-B131-E946B44C8DD5}”=-

Das Kursiv geschriebene einfach per Cut&Paste nach Notepad übernehmen und unter dem Dateinamen aus.reg abspeichern. Ein Doppelklick auf die Datei, dumme Fragen mit Ja beantworten, abmelden, anmelden und die Bibliotheken sind weg. Beim Einspielen von Updates kann es sein, dass diese Einträge wiederhergestellt werden. Dann einfach erneut die Datei ausführen.

Jetzt will ich die aber gerne wieder haben…übernehmen Sie den unteren kursiven Block in Notepad und speichern Sie es als an.reg ab.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
„{031E4825-7B94-4dc3-B131-E946B44C8DD5}“=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{031E4825-7B94-4dc3-B131-E946B44C8DD5}]
@=“UsersLibraries“
„Removal Message“=“@shell32.dll,-9047“

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{2112AB0A-C86A-4ffe-A368-0DE96E47012E}]
„Name“=“MusicLibrary“
„Category“=dword:00000004
„ParsingName“=“::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{2112AB0A-C86A-4ffe-A368-0DE96E47012E}“
„Stream“=dword:00000001
„StreamResource“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,32,00,00,00
„StreamResourceType“=“LIBRARY“
„RelativePath“=“Music.library-ms“
„ParentFolder“=“{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}“
„Icon“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,\
  6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
  00,31,00,30,00,30,00,34,00,00,00
„InfoTip“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,31,00,32,00,36,00,38,00,39,00,00,00
„LocalizedName“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,\
  6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
  00,5c,00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,\
  2c,00,2d,00,33,00,34,00,35,00,38,00,34,00,00,00
„PreCreate“=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{2112AB0A-C86A-4ffe-A368-0DE96E47012E}\PropertyBag]
„FoldersDependentOn“=“{4BD8D571-6D19-48D3-BE97-422220080E43};{3214FAB5-9757-4298-BB61-92A9DEAA44FF}“

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{491E922F-5643-4af4-A7EB-4E7A138D8174}]
„Name“=“VideosLibrary“
„Category“=dword:00000004
„ParsingName“=“::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{491E922F-5643-4af4-A7EB-4E7A138D8174}“
„Stream“=dword:00000001
„StreamResource“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,34,00,00,00
„StreamResourceType“=“LIBRARY“
„RelativePath“=“Videos.library-ms“
„ParentFolder“=“{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}“
„Icon“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,\
  6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
  00,31,00,30,00,30,00,35,00,00,00
„InfoTip“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,31,00,32,00,36,00,39,00,30,00,00,00
„LocalizedName“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,\
  6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
  00,5c,00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,\
  2c,00,2d,00,33,00,34,00,36,00,32,00,30,00,00,00
„PreCreate“=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{491E922F-5643-4af4-A7EB-4E7A138D8174}\PropertyBag]
„FoldersDependentOn“=“{18989B1D-99B5-455B-841C-AB7C74E4DDFC};{2400183A-6185-49FB-A2D8-4A392A602BA3}“

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7b0db17d-9cd2-4a93-9733-46cc89022e7c}]
„Name“=“DocumentsLibrary“
„Category“=dword:00000004
„ParsingName“=“::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{7b0db17d-9cd2-4a93-9733-46cc89022e7c}“
„Stream“=dword:00000001
„StreamResource“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,31,00,00,00
„StreamResourceType“=“LIBRARY“
„RelativePath“=“Documents.library-ms“
„ParentFolder“=“{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}“
„Icon“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,\
  6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
  00,31,00,30,00,30,00,32,00,00,00
„LocalizedName“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,\
  6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
  00,5c,00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,\
  2c,00,2d,00,33,00,34,00,35,00,37,00,35,00,00,00
„PreCreate“=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7b0db17d-9cd2-4a93-9733-46cc89022e7c}\PropertyBag]
„FoldersDependentOn“=“{FDD39AD0-238F-46AF-ADB4-6C85480369C7};{ED4824AF-DCE4-45A8-81E2-FC7965083634}“

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{A302545D-DEFF-464b-ABE8-61C8648D939B}]
„Name“=“UsersLibrariesFolder“
„Category“=dword:00000001
„ParsingName“=“::{031E4825-7B94-4dc3-B131-E946B44C8DD5}“

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{A302545D-DEFF-464b-ABE8-61C8648D939B}\PropertyBag]
„NoCustomize“=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{A990AE9F-A03B-4e80-94BC-9912D7504104}]
„Name“=“PicturesLibrary“
„Category“=dword:00000004
„ParsingName“=“::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{A990AE9F-A03B-4e80-94BC-9912D7504104}“
„Stream“=dword:00000001
„StreamResource“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,33,00,00,00
„StreamResourceType“=“LIBRARY“
„RelativePath“=“Pictures.library-ms“
„ParentFolder“=“{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}“
„Icon“=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,\
  6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
  00,31,00,30,00,30,00,33,00,00,00
„InfoTip“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
  00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,31,00,32,00,36,00,38,00,38,00,00,00
„LocalizedName“=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,\
  6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
  00,5c,00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,\
  2c,00,2d,00,33,00,34,00,35,00,39,00,35,00,00,00
„PreCreate“=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{A990AE9F-A03B-4e80-94BC-9912D7504104}\PropertyBag]
„FoldersDependentOn“=“{33E28130-4E1E-4676-835A-98395C3BC3BB};{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}“

 

Wenn ich mal viel Zeit habe, oder es viele Anfragen gibt, baue ich vielleicht auch ein Gruppenrichtlinie daraus ;-).

Troubleshooting pkgmgr.exe

pkgmgr.exe funktionert eigentlich nicht wirklich, sondern nur wenn man viel Glück hat.

Auf 64-bit Systemen achten Sie darauf, dass Sie den pkgmgr immer aus C:\Windows\system32 aufrufen und nicht aus dem Verzeichnis C:\Windows\sysWOW64!

Weiterhin brauchen Sie natürlich ein eine Admin-Eingabeaufforderung (cmd mit Strg+Shift+Enter aus dem Suchfeld starten).

Trotz all den logischen Troubleshooting Ansätzen läuft das Programm zwar ohne Fehlermeldung durch, aber trotzdem fehlen die Funktionen oder Rollen, die sie eigentlich installieren wollten, oder zumindest teile davon. Schaltet man dann das Logging mit /l:Logdatei.txt ein, stellt man in dieser Datei fest, dass doch Fehler passiert sind, nur das dämlich Programm so keinen Fehler zurück meldet. Im Log steht dann irgendwo versteckt mehrfach eine Fehlernummer 0x800f080c.

Läßt man mit oclist (Core Intsallation) oder servermanagercmd -query (GUI Installation) die Rollen und Features auflisten kommt es vor, dass viele Namen nicht denen entsprechen, die pkgmgr als Eingabe erwartet. Da liegt der Hase im Pfeffer! Nicht nur, dass viele ganz anders heißen, manche existieren gar nicht und können daher auch nicht mit pkgmgr hinzugefügt werden. Wie nennen sich den nun die Rollen und Features die pkgmgr versteht? Das finden Sie mit dism /online /get-features /format:table heraus. Damit bekommen Sie eine Liste die ungefähr servermanagercmd -query entspricht. Diese Namen sind es allerdings die der pkgmgr versteht. Ob Sie diese nun mit /n:unattend.xml installieren oder mit /ip:Packetname von dism spielt dabei keine Rolle. Viel, viel Glück!!!

„servermanagercmd.exe“ ist veraltet

…bitte verwenden Sie die Powershell. Toller Tipp!! Und wie?

Der pkgmgr.exe als Ersatz für sysocmgr.exe funktioniert auch nur Sonntag Nachmittags bei Mondschein. Warum lesen Sie hier.

Zunächst einmal muss das Modul zur Serververwaltung importiert werden, damit die entsprechenden Cmdlets überhaupt erst einmal in der Powershell zur Verfügung stehen. Das klappt mittels: import-module servermanager

Danach stehen einem dann die folgenden Befehle zur Verfügung:

get-windowsfeature = servermanagercmd -query (Abfragen welche Rollen[dienste] und Features installiert sind).
add-windowsfeature Rolle/Feature = servermanagercmd -install Rolle/Feature (Rolle[ndienst]/Feature hinzufügen).
remove-windowsfeature Rolle/Feature = servermanagercmd -remove Rolle/Feature (Rolle[ndienst]/Feature löschen).

Diese 3 Befehle werden einheitlich für Rollen, Rollendienste und Features (als auch die ganzen Bugs 😉 genutzt.

Features werden im Deutschen auch häufig als Funktionen bezeichnet.

Windows Server 2008 Core mit GUI

Windows Server 2008 Core als auch die R2 Version enthalten offensichtlich doch grafische Gestaltungselemente. Als Beweis tippen Sie doch einmal notepad, regedit oder timedate.cpl ein und drücken Enter/Return. Wie sagt man doch immer so schön: Der Laie staunt, der Fachmann wundert sich ;-).

Nun, also wenn Grafik geht, warum dann mühevoll auf der Kommandozeile z.B. die IP- und Firewallkonfiguration vornehmen?

Für Windows Server 2008 gibt es den Core Configurator 1.1 und für den R2 den Core Configurator 2.0. Kostenlos runterladen, auf CD brennen und Sie können von nun an alles grafisch einstellen.

Falls Sie Bedenken wegen der Sicherheit haben…es liegt jeweils im Quellcode vor, bzw. der Core Configurator 2.0 besteht „nur“ aus einer Sammlung von Powershellscripten, die Sie auch selbst schreiben könnten und in der Version 1.1 sind es vbs-Dateien also VisualBasicScript.

Da es auf Server 2008 keine Powershellunterstützung gibt ist Core Configurator 1.1 als ausführbares Programm auf der CD. Damit Sie die Powershellscripte vom Core Configurator 2.0 benutzen können, müssen Sie auch beim R2 erst die Powershell und das .NET Framework (gibt’s auch nicht auf dem 2008 – ohne R2) als Feature nachrüsten. Das geht wie folgt:

Installieren Sie mit ocsetup „NetFx2-ServerCore“ erst das .NET-Framework und danach mit ocsetup „MicrosoftWindowsPowerShell“ die Powershell. Ausnahmsweise bitte einmal die Groß-/Kleinschreibung beachten!

Nun können Sie mit dem Befehl start c:\windows\system32\powershell\v1.0\powershell eine Powershell Kommandozeile starten. Ohne „start“ würde die aktuelle Kommandozeile zur Powershell.

Auf der Powershell müssen Sie zunächst den Befehl set-executionpolicy unrestricted eingeben, damit die Scriptausführung zugelassen wird. Wenn Sie Ahnung haben, können Sie natürlich auch eine andere executionpolicy wählen. Allerdings kann man die sowieso jederzeit umstellen – sogar ohne Admin zu sein! So nun können Sie die Powershellscripte von der CD aufrufen um all Ihre Einstellungen (Computername, Aktivierung, IP- u. Firewallkonfiguration, Benutzerverwaltung, etc…) grafisch vorzunehmen.

Endlosschleife in einer Batch Datei zum vergleichen von Dateien

Mit Hilfe des For Befehls lassen sich auch Endlosschleifen z.B. zu einem Dateivergleich zusammenbasteln:

for /L %i in (0,0,0) do @fc Datei1.txt Datei2.txt>nul & if errorlevel 1 echo „Änderung“ & ping -n 10 127.0.0.1>nul

OK, zugegeben da stecken fast alle Finessen der Batch-Programmierung drin, aber es ist gar nicht so wild!

for /L %i in (0,0,0) do erstellt die Schleife. %i ist dabei die Variable in der hochgezählt wird. Normaler Weise würde in Klammern beispielsweise stehen (5,1,10). D.h. %i wäre beim 1. Durchlauf 5, beim 2. 6 usw. bis %i dem Wert 10 entspricht. Da wir aber 3 x 0 eintragen beruht darauf der Trick der Endlosschleife. Da durch die mittlere 0 in der Klammer ja nicht hochgezählt wird bleibt %i immer 0 (wegen der ersten Null in der Klammer) und er muss den Befehl immer weiter wiederholen. Wie stoppe ich das nun?! Wie immer (auch bei Befehlen die nicht mehr reagieren)…drücken Sie Strg+C.

Das @ sorgt dafür, dass die Befehlszeile nicht bei jedem Durchlauf angezeigt wird, sondern nur deren Ergebnis.

fc Datei1.txt Datei2.txt >nul vergleicht den Inhalt von Datei1.txt mit dem Inhalt von Datei2.txt, dank >nul wird aber nichts angezeigt. Da keine Pfandangaben gemacht wurden, müssen wird den Befehl in dem Verzeichnis eintippen wo sich die beiden Dateien befinden. Zum testen können Sie sich ja einfach eine ganz normale Textdatei anlegen und 123 als Inhalt reinschreiben und davon eine Kopie machen, die Sie dann Datei2.txt nennen. Dann ist der Inhalt erst einmal identisch.

Das & sorgt dafür, dass direkt im Anschluß (ohne erneut eine Kommandozeile mit Enter zu bestätigen. Dies entspricht dem ; unter Unix bzw. Bash) der nächste Befehl ausgeführt wird.

Durch if errorlevel 1 echo „Änderung“ wird überprüft ob der vorangegangene Befehl (fc) einen Fehler meldet(das tut er, wenn er einen Unterschied in den Dateien feststellt). Wenn die Dateien gleich sind passiert hier erst einmal gar nichts. Nur wenn wird einen Unterschied feststellen und somit einen Fehler bekommen geben wir mittels echo „Änderung“ den Text Änderung am Bildschirm aus.

Noch ein & für einen 3. Befehl innerhalb der Schleife.

Das ping -n 10 127.0.0.1>nul dient einfach nur der Zeitverzögerung, da Windows leider keinen sleep Befehl wie Linux (Bash) kennt. Alternativ könnte man vielleicht den Befehl pause verwenden, da muss man dann aber immer eine Taste drücken :-(. 10 Mal ping sich der PC selbst an (-n 10) und damit das Ergebnis von Ping die Anzeige von nicht weiter stört, werfen wir die Ausgabe mit >nul (entspricht dem Linux >/dev/nul) in den Orcus (Orcus=römischer Gott der Unterwelt=Jenseits). Danach kann der nächste Durchlauf wieder mit einem arp statt finden. Apropos Orcus…kennen Sie auch den Sisyphos? Genau eine solche Arbeit hat Ihr PC gerade bekommen ;-). Interessanter Weise verbraucht das Script recht viel CPU-Rechenzeit wenn die Dateien identisch sind, sobald die Änderung eintritt ist die CPU-Last nicht mehr nennenswert. Wenn Sie Ihre CPU also erlösen möchten ändern Sie doch den Inhalt von einer der beiden Dateien und schauen Sie was passiert.

PS: Wenn Sie den Befehl innerhalb einer Batch-Datei verwenden möchten und nicht direkt auf der Kommandozeile eintippen, schreiben Sie bitte %i als %%i (2x das Prozentzeichen, sonst geht es nicht)!!!

Unter Linux Aufgaben zeitgesteuert durchführen

Es gibt 3 Möglichkeiten etwas zu einer bestimmten Uhrzeit oder einem bestimmten Datum unter Linux ausführen zu lassen. Dies sind cron, anacron und at.

  • Cron führt Aufgaben zu einem bestimmten Zeitpunkt wiederkehrend aus.
  • Anacron macht das Gleiche mit dem kleinen aber feinen Unterschied, dass Jobs (Aufgaben) bei ausgeschaltetem PC nachgeholt werden sobald der PC wieder eingeschaltet ist. Bei cron fällt ein Job bei ausgeschaltetem PC einfach unter den Tisch.
  • At hingegen macht den Job zu einem bestimmten Zeitpunkt und fertig – keine Wiederholungen.

Für alle drei gibt es wie für andere Dämonen (Dienste) auch *.allow und *.deny (Beispiel: cron.deny) im /etc Verzeichnis. Dort trägt man Benutzer oder Gruppen ein die den Dienst entweder explizit nutzen (allow) oder eben nicht benutzen (deny) dürfen. Ich kann also einer Gruppe von Benutzern erlauben (allow) den Dienst zu verwenden, aber einen Benutzer aus der Gruppe (deny) explizit ausschließen.

Cron

Für cron gibt es die Datei /etc/crontab mit diesem Aufbau:

Minuten Stunden Tage Monate Wochentag Benutzer Befehl

Beispiel: 30 6 * * 1-5 root script.sh

Dieser Eintrag würde während der Woche (1-5 in Spalte 5: Montag=1,Dienstag=2…Freitag=5), aber nicht am Wochenende ein Script Namens script.sh als Benutzer root jeden Morgen um 6:30 Uhr unabhängig (wegen dem * in Spalte 3 und 4) vom Datum (Tag oder Monat) ausführen. Um etwas 1/4 stündlich ausführen zu lassen wären auch die folgenden beiden Einträge machbar:

0,15,30,45 * * * * root script.sh

*/4 * * * * root script.sh

Selbstverständlich braucht der angegebene Benutzer auch das ausführen Recht auf die angegebene Datei.

Bei den meisten heutigen Distributionen gibt es bereits Verzeichnisse wie cron.daily oder cron.hourly usw. in /etc. Da braucht man nur noch sein Script rein zu kopieren ohne dass man mit cron groß rumkonfiguriert.

Normal sterbliche Benutzer (nicht root) selbst haben auch ohne Zugriff auf diese Dateien die Möglichkeit cron zu nutzen. Dafür gibt es das Verzeichnis /var/spool/cron/tabs/Benutzer wo jeder seine eigenen Cronjos basteln kann. Alternativ kann man auch das command crontab verwenden um die Jobs anzulegen.

Anacron

Für anacron gibt es die Datei /etc/anacrontab (bei SuSE sucht man dies vergeblich – kann man nur von Sourceforge als Quellcode kompilieren und installieren).

Beispiel: 7 5 Name script.sh

Das script namens script.sh wird alle 7 Tage ausgeführt. Die 5 bedeutet, dass der Job wenn er fällig ist (seit 7 Tagen nicht gelaufen) um 5 Minuten verzögert wird. Stellen Sie sich vor der PC war einen Monat aus und nun starten 50 Jobs auf einmal. Daher sollte man die Jobs mit unterschiedlichen Verzögerungsintervallen ausstatten um den PC nach dem langen Winterschlaf nicht gleich zu überfordern. Name ist der Name unter dem der Job geführt wird und kann beliebig gewählt werden (es ist nicht der Name der Benutzers unter dem der Job ausgeführt wird wie bei cron!).

At

at ist etwas seltsam in der Verwendung, aber trotzdem ganz brauchbar.

Beispiel: echo ’shutdown -h -t min 2′ | at 12:00

Um 12:00 Uhr wird der Befehl shutdown (muss in ein echo verpackt und per Pipe übergeben werden) ausgeführt. shutdown wiederum ist durch den Parameter -t min 2 angewiesen noch 2 Minuten zu warten. Also wird der Computer bei diesem Befehl um 12:02 Uhr heruntergefahren. Wenn Sie längere Romane an Befehlen schreiben möchten können Sie auch wie folgt vorgehen:

at 12:00 2011-11-23 << EOF

echo „Happy Birthday“ | wall

EOF

Am 23.11.2011 um 12:00 Uhr würde ich also den PC veranlassen mir zum Geburtstag zu gratulieren. Zugegeben, das Beispiel wäre besser für cron oder anacron geeignet, da es sich (hoffentlich 😉 um ein wiederkehrendes Ereignis handelt.

Powershellbefehle bejahen lassen

Die meisten Powershellbefehle unterstützen den Schalter -confirm:$false damit werden Rückfragen automatisch mit „Ja“ beantwortet. Wenn man also mit remove-item * eine ganze Sammlung löschen möchte kann es schon ganz schön nerven wenn das 100 Objekte sind die alles bestätigt werden müssen. Einfach remove-item * -confirm:$false und schwupps ist alles weg. Ein -confirm:$true können Sie sich sparen, da dies die Standardvorgabe ist.

Ein Testlauf mit dem Schalter -whatif (erst mal simulieren – nicht machen) wäre u. U. hilfreich ;-).