Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell:ad:set-vdisystemgroupmembership

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
powershell:ad:set-vdisystemgroupmembership [2019/12/11 12:46] – angelegt henningpowershell: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 "Skip-Gruppe" nicht verarbeitet werden sollen.\\
  
 +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       Set-VdiSystemGroupMembership
 +Version    1.0
 +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 "$SkipGroup" aufgenommen und von der weiteren Bearbeitung ausgeschlossen.
 +#>
 +
 +# Logging festlegen
 +$Date=get-date -Format yyyMMdd
 +$LogPath="C:\ProgramData\Skripte\log\Set-VdiSystemGroupMembership"
 +if (!(Test-Path $LogPath))
 +    {
 +    New-Item -ItemType Directory $LogPath
 +    }
 +
 +$Logfile="$LogPath\$date`.log"
 +
 +# 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:$false
 +        }
 +    }
 +
 +
 +Write-Host "Alle Systeme mit passenden Namen aus der defnierten OU abfragen"
 +$AllSystems=@()
 +$AllSystems+=get-adcomputer -SearchBase "OU=VBW Horizon VMs,DC=vbw-bochum,DC=local" -filter {samaccountname -like "vm-2c*"}
 +$AllSystems+=get-adcomputer -SearchBase "OU=VBW Horizon VMs,DC=vbw-bochum,DC=local" -filter {samaccountname -like "vm2c*"}
 +$AllSystems+=get-adcomputer -SearchBase "OU=VBW Horizon VMs,DC=vbw-bochum,DC=local" -filter {samaccountname -like "vm-4c*"}
 +$AllSystems+=get-adcomputer -SearchBase "OU=VBW Horizon VMs,DC=vbw-bochum,DC=local" -filter {samaccountname -like "vm4c*"}
 +
 +Write-Host "Datei mit den benannten Gruppen einlesen"
 +$groups=Import-Csv -Delimiter ";" -Encoding UTF8 "C:\ProgramData\Skripte\etc\Set-VdiSystemGroupMembership.csv"
 +
 +#Skip-Gruppe der zu überspringenden Systeme
 +$SkipGroup="VDI-Skip-Gruppenskript"
 +
 +Write-Host "Herausfiltern der Systeme mit Gruppenmitgliedschaft in $SkipGroup"
 +$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 "Mitglieder der Gruppe $($group.Name) ermitteln"
 +    $members = Get-ADGroupMember "$($group.Name)"
 +    if (!($members.count -eq 0))
 +        {
 +        $AddMembers=$WorkSystems.distinguishedname
 +        }
 +    Else
 +        {
 +        $AddMembers=(compare-object $members.distinguishedname $WorkSystems.distinguishedname | Where-Object SideIndicator -Like "=>").inputobject
 +        }
 +    foreach ($AddMember in $AddMembers)
 +        {
 +        $newmember=$($AddMember.Split(",")[0]).split("=")[1]
 +        $newmember=$newmember+"`$"
 +        Write-Host "$newmember zur $($group.name) hinzufügen"
 +        Add-ADGroupMember -identity $group.name -Members $newmember -Verbose
 +        }
 +    }
 +
 +Write-Host "$AdReplicationTime Sekunden auf AD-Repliaktion der neuen Mitgliedschaften warten"
 +Start-sleep -Seconds $AdReplicationTime
 +
 +Write-Host "Prüfen, ob die Mitgliedschaften geschrieben wurden und System in die Skip-Gruppe aufnehmen"
 +foreach ($system in $WorkSystems)
 +    {
 +    $check=(Compare-Object (Get-ADPrincipalGroupMembership $system.SamAccountName).samaccountname $groups.name | Where-Object sideindicator -like "=>").count
 +    if ($check -like "0")
 +        {
 +        Write-Host "$($System.samaccountname) wird zu $SkipGroup hinzugefügt"
 +        Add-ADGroupMember -Identity $SkipGroup -Members $system.SamAccountName
 +        }
 +    Else
 +        {
 +        Write-Host "$($System.samaccountname) wurde nicht in allen definierten Gruppen gefunden und deshalb nicht zu $SkipGroup hinzugefügt"
 +        }
 +    }
 +
 +
 +
 +
 +# Logging beenden
 +Stop-Transcript
 +</file>
 +===== Gruppen-Datei =====
 +Dir Gruppen werden in einer einfachen CSV-Datei definiert.
 +<file csv set-VdiSystemGroupMembership.csv>
 +"Name"
 +"Computer_SAP_Logon_CFG_von_Server_laden_(SAPGui_7.60)_s"
 +"Computer Win10 Windows-Fotoanzeige für JPG-PNG-BMP-GIF_s"
 +"Computer_Google_Chrome_erlaubte_Erweiterungen_s"
 +"Computer_SW_Google_Chrome_Enterprise_s"
 +"Computer_Benutzerkontensteuerung Verwendung des Administratorg_S"
 +"Computer_SW_Ortis_Contract_Dropzone_S"
 +"Computer_SW_XPhoneUC_Commander_4.5.5_UM_s"
 +"Computer_SW_innovaphone_myPBX_s"
 +"Computer_SW_AdobeAcrobatReader_2015_s"
 +"Computer_Windows-Firewall_DomaenenProfil_FW_aus_S"
 +"Computer_Wartezeit_fuer_Richtlinienverarb_beim_Systemstart_s"
 +"Computer_WSUS_s"
 +"Computer_SW_Teamviewer_Host_s"
 +"Computer_Windows-Remoteverwaltung_einschalten_s"
 +"Computer_SW_SymantecEP_SVBW22_s"
 +</file>
  
powershell/ad/set-vdisystemgroupmembership.1576064766.txt.gz · Zuletzt geändert: 2024/05/27 08:34 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki