如何通过CSV/TXT列表批量将计算机移入WSUS组?
批量将计算机移入WSUS组的解决方法
你遇到的问题根源在于Get-WsusComputer的-NameIncludes参数仅支持单个字符串匹配,无法直接接收多个计算机名组成的数组。以下是针对TXT和CSV列表的可行批量处理方案:
针对TXT列表的处理脚本
假设你的D:\pc.txt每行存储一个计算机名(支持部分匹配,比如输入"winvm"会匹配所有名称含"winvm"的计算机):
# 连接目标WSUS服务器 $wsusServer = Get-WsusServer -Name "contoso" # 定义目标WSUS组名称 $targetGroupName = "Windows Virtual Machines" # 读取TXT中的计算机名列表,自动过滤空行 $computerNames = Get-Content D:\pc.txt | Where-Object { $_ -match '\S' } foreach ($name in $computerNames) { $cleanName = $name.Trim() # 查找匹配的WSUS计算机对象 $wsusComputer = $wsusServer | Get-WsusComputer -NameIncludes $cleanName if ($wsusComputer) { # 将计算机添加到目标组 $wsusComputer | Add-WsusComputer -TargetGroupName $targetGroupName Write-Host "成功将 [$cleanName] 移入目标组" } else { Write-Warning "未找到名称包含 [$cleanName] 的计算机" } }
针对CSV列表的处理脚本
如果你的计算机信息存储在CSV中(比如包含完整计算机名、域名等),假设CSV格式如下:
ComputerName WINVM01.contoso.com WINVM02.contoso.com WINVM03
使用以下脚本处理:
$wsusServer = Get-WsusServer -Name "contoso" $targetGroupName = "Windows Virtual Machines" # 导入CSV数据 $computerList = Import-Csv D:\computers.csv foreach ($entry in $computerList) { $cleanName = $entry.ComputerName.Trim() $wsusComputer = $wsusServer | Get-WsusComputer -NameIncludes $cleanName if ($wsusComputer) { $wsusComputer | Add-WsusComputer -TargetGroupName $targetGroupName Write-Host "成功将 [$cleanName] 移入目标组" } else { Write-Warning "未找到名称包含 [$cleanName] 的计算机" } }
额外优化建议
- 如果需要精确匹配计算机名(而非部分包含),可以将查找逻辑替换为:
$wsusComputer = $wsusServer | Get-WsusComputer | Where-Object { $_.FullDomainName -eq $cleanName -or $_.Name -eq $cleanName } - 确保运行脚本的账号拥有WSUS服务器的管理员权限
- 检查TXT/CSV文件编码为UTF-8(无BOM),避免特殊字符或乱码导致匹配失败
内容的提问来源于stack exchange,提问作者morfus
相关产品推荐
相关产品推荐

