powershell:ad:set-vdisystemgroupmembership
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| powershell:ad:set-vdisystemgroupmembership [2019/12/11 12:46] – angelegt henning | powershell:ad:set-vdisystemgroupmembership [2024/05/27 08:36] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Set-VdiSystemGroupMembership.ps1 ====== | ====== Set-VdiSystemGroupMembership.ps1 ====== | ||
| + | ===== Was macht das Skript? ===== | ||
| + | Das Skripte ermittelt Systeme innerhalb einer OU und fügt sie dann Gruppen im AD hinzu. Weiteres Kriterium ist, dass Systeme bei Mitgliedschaft in einer " | ||
| + | Hintergrund ist das Anlegen größerer Mengen von Maschinen während der Einführung neuer Systeme, welche dann über die Gruppenmitgliedschaften GPOs zugewiesen bekommen. | ||
| + | ===== Das Skript ===== | ||
| + | <file powershell Set-VdiSystemGroupMembership.ps1> | ||
| + | <# | ||
| + | Name | ||
| + | Version | ||
| + | Datum 10.12.2019 | ||
| + | Autor VBW / Henning Löser | ||
| + | |||
| + | Funktion: | ||
| + | Das Skript ist eine temporäre Hilfe, um neu deployte VDI-Maschinen in eine benannte Liste von AD-Gruppen aufzunehmen. | ||
| + | Bereits erfolgreich bearbeitete Systeme werden in eine Hilfsgruppe " | ||
| + | #> | ||
| + | |||
| + | # Logging festlegen | ||
| + | $Date=get-date -Format yyyMMdd | ||
| + | $LogPath=" | ||
| + | if (!(Test-Path $LogPath)) | ||
| + | { | ||
| + | New-Item -ItemType Directory $LogPath | ||
| + | } | ||
| + | |||
| + | $Logfile=" | ||
| + | |||
| + | # Dauer der Wartezeit vor dem Prüfen der neu geschriebenen Gruppenmitgliedschaften | ||
| + | $AdReplicationTime=30 | ||
| + | |||
| + | # Logging beginnen | ||
| + | Start-Transcript -Path $Logfile -Append | ||
| + | |||
| + | # Logdateien auf $LogFileLimit begrenzen | ||
| + | $LogFileLimit=14 | ||
| + | $LogFiles=Get-ChildItem $LogPath | ||
| + | |||
| + | # Wenn mehr als $LogFileLimit Dateien bestehen, die ältesten überschüssigen Dateien löschen | ||
| + | If ($LogFiles.count -gt $LogFileLimit) | ||
| + | { | ||
| + | Write-Host "Alte Logdateien entfernen" | ||
| + | $RemoveNo=($LogFiles.count - $LogFileLimit) | ||
| + | $RemoveFiles=$LogFiles | sort-object LastWriteTime -Descending | Select-Object -Last $RemoveNo | ||
| + | foreach ($item in $RemoveFiles) | ||
| + | { | ||
| + | Remove-Item $item.fullname -Force -Confirm: | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | Write-Host "Alle Systeme mit passenden Namen aus der defnierten OU abfragen" | ||
| + | $AllSystems=@() | ||
| + | $AllSystems+=get-adcomputer -SearchBase " | ||
| + | $AllSystems+=get-adcomputer -SearchBase " | ||
| + | $AllSystems+=get-adcomputer -SearchBase " | ||
| + | $AllSystems+=get-adcomputer -SearchBase " | ||
| + | |||
| + | Write-Host "Datei mit den benannten Gruppen einlesen" | ||
| + | $groups=Import-Csv -Delimiter ";" | ||
| + | |||
| + | # | ||
| + | $SkipGroup=" | ||
| + | |||
| + | Write-Host " | ||
| + | $WorkSystems=@() | ||
| + | foreach ($system in $AllSystems) | ||
| + | { | ||
| + | if (!((Get-ADPrincipalGroupMembership $system.SamAccountName).samaccountname -contains $SkipGroup)) | ||
| + | { | ||
| + | Write-Host "Work on $($system.samaccountname)" | ||
| + | $WorkSystems+=$system | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if ($WorkSystems.Count -eq 0) | ||
| + | { | ||
| + | Write-Host "Kein System zur Abarbeitung gefunden, Skript wird beendet" | ||
| + | Stop-Transcript | ||
| + | Exit | ||
| + | } | ||
| + | Else | ||
| + | { | ||
| + | Write-Host "Es wurden $($WorkSystems.Count) Systeme zur Bearbeitung gefunden" | ||
| + | } | ||
| + | |||
| + | Write-Host "Die definierten AD-Gruppen auf bestehende Mitgliedschaft der abzuarbeitenden Systeme prüfen, `nnur fehldene Mitgliedschaften hinzufügen" | ||
| + | foreach ($group in $groups) | ||
| + | { | ||
| + | Write-Host " | ||
| + | $members = Get-ADGroupMember " | ||
| + | if (!($members.count -eq 0)) | ||
| + | { | ||
| + | $AddMembers=$WorkSystems.distinguishedname | ||
| + | } | ||
| + | Else | ||
| + | { | ||
| + | $AddMembers=(compare-object $members.distinguishedname $WorkSystems.distinguishedname | Where-Object SideIndicator -Like " | ||
| + | } | ||
| + | foreach ($AddMember in $AddMembers) | ||
| + | { | ||
| + | $newmember=$($AddMember.Split("," | ||
| + | $newmember=$newmember+" | ||
| + | Write-Host " | ||
| + | Add-ADGroupMember -identity $group.name -Members $newmember -Verbose | ||
| + | } | ||
| + | } | ||
| + | |||
| + | Write-Host " | ||
| + | Start-sleep -Seconds $AdReplicationTime | ||
| + | |||
| + | Write-Host " | ||
| + | foreach ($system in $WorkSystems) | ||
| + | { | ||
| + | $check=(Compare-Object (Get-ADPrincipalGroupMembership $system.SamAccountName).samaccountname $groups.name | Where-Object sideindicator -like " | ||
| + | if ($check -like " | ||
| + | { | ||
| + | Write-Host " | ||
| + | Add-ADGroupMember -Identity $SkipGroup -Members $system.SamAccountName | ||
| + | } | ||
| + | Else | ||
| + | { | ||
| + | Write-Host " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | # Logging beenden | ||
| + | Stop-Transcript | ||
| + | </ | ||
| + | ===== Gruppen-Datei ===== | ||
| + | Dir Gruppen werden in einer einfachen CSV-Datei definiert. | ||
| + | <file csv set-VdiSystemGroupMembership.csv> | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | </ | ||
powershell/ad/set-vdisystemgroupmembership.1576064766.txt.gz · Zuletzt geändert: 2024/05/27 08:34 (Externe Bearbeitung)
