通过 PowerShell 自动化 WSUS

通过 PowerShell 自动化 WSUS

我编写了一个脚本,目的是快速管理微软流程,我有一些硬编码的内容,但更愿意使用 PowerShell。特别是 Approve-WsusUpdate 的“目标”组。

目前我正在做这样的事情:

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

是否有“get-targets”命令可以创建可用目标组数组?这样我就可以删除手动声明$TargetComputerGroups

此外,我想编写$UserPrompt一组更好的代码(再次避免手动声明)。我认为可以这样做'$i for $i in $TargetComputerGroups' write-host 'Press 1 for i'

话虽如此,我对此非常陌生,所以我不知道最好的方法是什么(理想情况下将他们的选择映射到该语句中的正确组!)。

答案1

您可以使用 PowerShell 来执行此操作,但您还需要在计算机上安装 WSUS 管理控制台。

然后您可以执行以下操作。

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

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

$wsus

然后,您可以使用以下方式获取目标群体列表

$wsus.GetComputerTargetGroups()

或者选择一个组

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

更多信息请参见使用 PowerShell 在 WSUS 上执行基本管理任务,但以上信息将为您提供有关这些团体的信息。

答案2

正如 Drifter104 所说,目前还没有可用于管理 WSUS 的 PowerShell 模块,尽管下一个 Windows Server 版本中将包含一个模块(https://technet.microsoft.com/en-us/library/hh826166.aspx);同时,您需要导入用于管理 WSUS 的 .NET 程序集并使用它;PowerShell 中最出色的功能之一是,即使它不包含用于执行给定任务的本机 cmdlet,您也可以从中访问完整的 .NET 环境,并且您实际上可以执行任何您可以从 .NET 应用程序中执行的操作。

关于脚本部分:一旦您在数组中获取了 WSUS 组的名称,动态构建显示给用户的列表就非常容易;只需循环遍历数组并使用索引作为选择编号:

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: "

相关内容