Automatizando o WSUS via PowerShell

7

Eu escrevi um script com a intenção de gerenciar rapidamente o processo WSUS , e tenho algumas coisas difíceis codificado, mas prefere ficar com o PowerShell. Em particular, os grupos 'Target' para Approve-WsusUpdate.

Atualmente estou fazendo algo assim:

#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]

Existe um comando 'get-targets' que criará uma matriz de grupos-alvo disponíveis? Dessa forma, eu poderia remover a declaração manual de $TargetComputerGroups .

Além disso, gostaria de tornar o $UserPrompt um conjunto de códigos melhor (novamente evitando declarações manuais). Eu acho que fazer algo como '$i for $i in $TargetComputerGroups' write-host 'Press 1 for i'

Dito isto, eu sou muito novo nisso, então eu não sei a melhor maneira de fazer isso (idealmente mapeando sua seleção para o grupo correto nessa declaração!).

    
por Abraxas 02.09.2015 / 18:41

2 respostas

10

Você pode fazer isso com o PowerShell, mas também precisa ter o console de administração do WSUS instalado na máquina.

Você pode então fazer o seguinte.

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

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

$wsus

Você pode então obter uma lista de grupos-alvo com

$wsus.GetComputerTargetGroups()

Ou selecione um grupo com

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

Há muito mais informações em Use o PowerShell para executar tarefas administrativas básicas no WSUS , mas as informações acima fornecerão informações sobre os grupos.

    
por 02.09.2015 / 18:57
4

Como Drifter104 disse, ainda não há um módulo do PowerShell disponível para o gerenciamento do WSUS, embora um deles seja incluído na próxima versão do Windows Server ( link ); Enquanto isso, você precisa importar o assembly .NET para gerenciar o WSUS e usá-lo; um dos melhores recursos do PowerShell é que, mesmo que ele não inclua cmdlets nativos para executar uma determinada tarefa, você terá acesso a todo o ambiente .NET a partir dele e poderá realmente fazer tudo o que puder Aplicação .NET.

Sobre a parte do script: assim que você obter os nomes dos grupos do WSUS em uma matriz, construir dinamicamente a lista mostrada para os usuários é muito fácil; simplesmente percorra a matriz e use um índice para o número de seleção:

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: "
    
por 02.09.2015 / 19:39