Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell:ad:set-vdisystemgroupmembership

Dies ist eine alte Version des Dokuments!


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

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
$Logfile="C:\ProgramData\Skripte\log\Set-VdiSystemGroupMembership`_$date`.log"
 
# Dauer der Wartezeit vor dem Prüfen der neu geschriebenen Gruppenmitgliedschaften
$AdReplicationTime=30
 
# Logging beginnen
Start-Transcript -Path $Logfile -Append
 
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
    }
 
Write-Host "Die definierten AD-Gruppen auf bestehende Mitgliedschaft der abzuarbeitenden Systeme prüfen, `nnur fehldene Mitgliedschaften hinzufügen"
foreach ($group in $groups)
    {
    $members = Get-ADGroupMember "$($group.Name)"
    $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

Gruppen-Datei

Dir Gruppen werden in einer einfachen CSV-Datei definiert.

"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"
powershell/ad/set-vdisystemgroupmembership.1576065210.txt.gz · Zuletzt geändert: 2024/05/27 08:34 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki