如何将AD计算机名称传入数组?Set-ADComputer执行失败求助
问题根源与解决方案
你的问题核心出在获取服务器列表时使用了ft -HideTableHeaders这个命令——它会把原本的ADComputer对象转换成格式化表格对象,而不是你需要的服务器名称字符串或ADComputer对象,这直接导致Set-ADComputer无法识别输入的身份参数。
修正步骤:
1. 正确获取服务器列表
你有两种更合适的方式获取服务器数据,根据需求选择:
方式一:获取纯服务器名称数组(适合只需要名称的场景)
# 获取所有Windows Server类别的计算机名称数组 $servers = Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"} | Select-Object -ExpandProperty Name
方式二:保留完整ADComputer对象(推荐,减少AD查询次数)
# 获取完整的ADComputer对象数组,后续Set-ADComputer可直接使用对象 $servers = Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"}
2. 执行Set-ADComputer操作
不管用哪种方式,后续的循环操作都能正常运行。举个设置计算机描述的示例:
# 遍历服务器列表执行操作 foreach ($server in $servers) { # 这里替换成你实际需要的Set-ADComputer参数 Set-ADComputer -Identity $server -Description "Managed by $gateway" }
为什么原来的代码会失败?
ft(即Format-Table)的作用是把数据转换成适合显示的格式化输出,它返回的是Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData类型的对象,而Set-ADComputer的-Identity参数只接受ADComputer对象、SID、GUID或计算机名称字符串,自然无法识别这些格式化对象。
你可以用以下命令验证变量类型,排查这类问题:
# 查看$servers的类型 $servers.GetType() # 查看$servers包含的对象成员 $servers | Get-Member
内容的提问来源于stack exchange,提问作者CoertK
相关产品推荐
相关产品推荐

