Automatisierung von WSUS über PowerShell

7

Ich habe ein Skript mit der Absicht geschrieben, den WSUS- Prozess schnell zu verwalten , und ich habe ein paar Dinge, die ich fest codiert habe, die ich aber lieber mit PowerShell erledigen möchte. Insbesondere die 'Zielgruppen' für Approve-WsusUpdate.

Momentan mache ich so etwas:

#Select Target Group for Update Approval:

$TargetComputerGroups = "All Computers", "Unassigned Computers", "Clients", "Servers", "Test", "View Templates"

$UserPrompt = @"

Please select a Computer Group from the below options:

1) All Computers (Selects all of the below)
2) Unassigned Computers
3) Clients
4) Servers
5) Test
6) View Templates

Enter selection
"@

###Record user selection to varirable
$TargetComputerGroupTemp = Read-Host -Prompt $UserPrompt

###Convert their choice to the correct 0-index array value.
$TargetComputerIndex = $TargetComputerGroupTemp -1

$ComputerTarget = $TargetComputerGroups[$TargetComputerIndex]

Gibt es einen Befehl 'get-target', mit dem ein Array verfügbarer Zielgruppen erstellt wird? Auf diese Weise konnte ich die manuelle Deklaration von entfernen $TargetComputerGroups.

Außerdem möchte ich den $UserPromptCode verbessern (auch hier werden manuelle Deklarationen vermieden). Ich denke so etwas zu tun'$i for $i in $TargetComputerGroups' write-host 'Press 1 for i'

Davon abgesehen bin ich SEHR neu in diesem Bereich, daher weiß ich nicht, wie ich das am besten tun kann (idealerweise ordnen Sie ihre Auswahl der richtigen Gruppe in dieser Aussage zu!).

Abraxas
quelle

Antworten:

10

Sie können dies mit PowerShell tun, aber Sie müssen auch die WSUS-Administrationskonsole auf dem Computer installiert haben.

Sie können dann Folgendes tun.

[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer(“wsus_server”,$False)

$wsus

Sie können dann eine Liste der Zielgruppen mit erhalten

$wsus.GetComputerTargetGroups()

Oder wählen Sie eine Gruppe mit

$targetgroup = $wsus.GetComputerTargetGroups() | ? {$_.Name -eq "some target name"}

In PowerShell zum Ausführen grundlegender Verwaltungsaufgaben unter WSUS finden Sie viel mehr Informationen. Mit den oben genannten Informationen erhalten Sie jedoch Informationen zu den Gruppen.

Drifter104
quelle
Oooph. Je mehr ich versuche, der Powershell nachzugeben, desto mehr werde ich enttäuscht = / Ich werde das akzeptieren, wenn ich am Ende des Tages nichts anderes höre. Der Link sieht gut aus und danke für Ihre Hilfe!
Abraxas
Gib nach :) Ich benutze es oft. Selbst wenn es keinen nativen Powershell-Befehl gibt, hat oft jemand ein Modul dafür geschrieben.
Drifter104
Ja, ich wünschte nur, das UpdateServices-Modul hätte die Fähigkeit, Zielgruppen oder ähnliches abzurufen, da es eine Eigenschaft für 3 andere Befehle darin ist. Lol = / Ich bin auch neu in diesem Powershell-Zeug und dieser '[void] [Reflexion. Assembly] :: LoadWithPartialName ("Microsoft.UpdateServices.Administration") 'ist für mich immer noch so seltsam. Wie auch immer, danke!
Abraxas
4

Wie Drifter104 sagte, ist noch kein PowerShell-Modul zum Verwalten von WSUS verfügbar, obwohl eines in der nächsten Windows Server-Version enthalten sein wird ( https://technet.microsoft.com/en-us/library/hh826166.aspx ). In der Zwischenzeit müssen Sie die .NET-Assembly für die Verwaltung von WSUS importieren und verwenden. Eine der größten Funktionen in PowerShell ist, dass Sie, auch wenn es keine nativen Cmdlets zum Ausführen einer bestimmten Aufgabe enthält, Zugriff auf die gesamte .NET-Umgebung haben und tatsächlich alles tun können, was Sie von einem aus tun können .NET-Anwendung.

Informationen zum Skriptteil: Sobald Sie die Namen Ihrer WSUS-Gruppen in einem Array erhalten haben, ist es recht einfach, die Ihren Benutzern angezeigte Liste zu erstellen. Durchlaufen Sie einfach das Array und verwenden Sie einen Index für die Auswahlnummer:

Write-Host Please select a Computer Group from the below options:

$i = 1

foreach($g in $TargetComputerGroups)
{
    Write-Host Press $i for $g
    $i++
}

$sel = Read-Host -Prompt "Enter selection: "
Massimo
quelle