Peter Kloep

A+ R A-

Powershell

Rekursive Auflistung der Mitglieder einer Gruppe

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Samstag, 27. April 2013 20:20
  • Veröffentlicht: Samstag, 27. April 2013 20:20
  • Geschrieben von Peter Kloep
  • Zugriffe: 13130

Mit dem ActiveDirectory-Modul kann man nun die Gruppenmitglieder einer Gruppe rekursiv auflisten:

if (-not(Get-Module-NameActiveDirectory)) {import-moduleActiveDirectory}
Get-ADGroupMember-IdentityGruppe-Recursive|ftname,sid-AutoSize

Formatieren von Strings

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Donnerstag, 25. April 2013 07:11
  • Veröffentlicht: Donnerstag, 25. April 2013 07:07
  • Geschrieben von Peter Kloep
  • Zugriffe: 11003

Mit der Substring-Option kann man Strings bearbeiten, um zum Beispiel von einem Dateinamen die Erweiterung abzuschneiden:

$Server ist mit dem Wert: RootDC01.log definiert. Durch das folgende Snippet wird die Erweiterung .log abgeschnitten. Substring besteht aus Startzeichen, Endzeichen und Anzahl der abzuschneidenden Zeichen (-4)

$server.Substring(0,$server.Length -4)

Prüfen, ob ein Ordner existiert

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Donnerstag, 25. April 2013 07:16
  • Veröffentlicht: Donnerstag, 25. April 2013 07:00
  • Geschrieben von Peter Kloep
  • Zugriffe: 12269

Mit folgendem Code-Snippet wird geprüft, ob ein Ordner existiert. Ist der Ordner nicht vorhanden, wird er erstellt. Existiert der Ordner "ausgabe" nicht im aktuellen Ordern, wird er angelegt.

if ((Test-Path .\ausgabe) -ne $True) {New-Item .\ausgabe -type directory}

Powershell-Skript um Dateien zu löschen

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Donnerstag, 25. April 2013 07:12
  • Veröffentlicht: Mittwoch, 10. April 2013 14:15
  • Geschrieben von Peter Kloep
  • Zugriffe: 17174

Mit folgendem Powershell-Skript - das per Taskplaner gestartet werden kann, werden Dateien in einem Ordner gelöscht, die älter als 10 Stunden sind:

$now = get-date
 cd '<Ordner>'
 get-childitem * |
 where-object {$_.LastWriteTime -le $now.AddHours(-10)} |
 remove-item

Computer in OS-Gruppen aufnehmen

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Mittwoch, 17. Juli 2013 11:15
  • Veröffentlicht: Samstag, 30. März 2013 12:29
  • Geschrieben von Peter Kloep
  • Zugriffe: 12985

Mit folgendem kleinen PowerShell-Skript kann man Computerkonten basierend auf dem Betriebssystem (Informationen im AD) in verschiedene Gruppen stecken:

import-module ActiveDirectory
$WinXP = "WinXP-Computer"
$Win7 = "Win7-Computer"

#Empty Groups
Get-ADGroupMember -Identity $Win7 | Remove-ADPrincipalGroupMembership -memberof $Win7 -Confirm:$false
Get-ADGroupMember -Identity $WinXP | Remove-ADPrincipalGroupMembership -memberof $WinXP -Confirm:$false

#Add Win7-Computer
$Win7Computers = get-adcomputer -filter {OperatingSystem -Like "Windows 7*"}
foreach ($Computer in $Win7Computers)
{
Add-ADGroupMember -Identity $Win7 -member $Computer
}

#Add WinXP-Computer
$WinXPComputers = get-adcomputer -filter {OperatingSystem -Like "Windows XP*"}
foreach ($Computer in $WinXPComputers)
{
Add-ADGroupMember -Identity $WinXP -member $Computer
}

In dem Skript werden die beiden Gruppen zuerst geleert und anschließend die Konten (XP oder Windows7) hinzugefügt. Die Suche erfolgt über die komplette Domäne. Die Abfrage kann wahlweise auch auf eine einzelne OU angewendet werden.

Report aller GPOs

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Dienstag, 23. Januar 2018 08:23
  • Veröffentlicht: Donnerstag, 28. März 2013 14:13
  • Geschrieben von Peter Kloep
  • Zugriffe: 16247

Mit dem folgenden PowerShell-Skript werden alle GPOs einer Domäne als HTML-File (incl. Links) dokumentiert. Voraussetzung ist das GroupPolicy-Modul (Server 2008 R2/Win7) für die PowerShell

import-Module GroupPolicy
$targetDomain='<Domänenname>'
Get-GPO -All|foreach `
{
  $name=$_.DisplayName
  Get-GPOReport $_.id -ReportType HTML -Domain $targetDomain -Path c:\GPO-Report\$name.html
}

... oder aber bei mehreren Domänen in der Gesamtstruktur:

Import-Module GroupPolicy
foreach ($Domain in (Get-ADForest).Domains)
{
  get-gpo -All -Domain $Domain | foreach {$name=$_.displayname;Get-GPOReport $_.id -ReportType HTML-Domain $Domain -Path C:\GPO-Report\$domain-$name.html} 
}

 

Suchen und Kopieren von Dateien per PowerShell

  • Hauptkategorie: FAQs
  • Kategorie: Powershell
  • Zuletzt aktualisiert: Donnerstag, 25. April 2013 07:13
  • Veröffentlicht: Donnerstag, 30. September 2010 15:25
  • Geschrieben von Peter Kloep
  • Zugriffe: 25759

Mit der PowerShell unter Windows 7 (und Server 2008 R2) kann man sehr einfach einen Datenträger nach bestimmten Dateien durchsuchen, und diese Dateien anschließend in einen separaten Ordner verschieben.

Dazu kann man folgenden Befehl verwenden:

Get-ChildItem -Recurse -Include *.mp3 | select fullname | Copy-Item -Path {$_.Fullname} c:\musik

 

Dieser Befehl listet alle Dateien mit der Endund "*.mp3" im aktuellen Verzeichnis und allen Unterverzeichnissen auf. All diese Dateien werden dann in den Ordner C:\musik kopiert. Dabei wird nicht geprüft, ob die Datei bereits vorhanden ist. Dies könnte man über Parameter des Cmdlets "Copy-Item" abfangen.