如何将AD计算机名称传递给数组?

时间:2018-04-26 21:47:38

标签: arrays powershell object foreach active-directory

我正在尝试在与添加到$ servers数组的过滤器匹配的所有计算机上设置ADComputer。但它不起作用。我想这与将一个对象传递给一个字符串有关,但我无法理解它。任何人都有金色的小费?

#Get gateway
$gateway = "MGMT01"
$gatewayObject = Get-ADComputer -Identity $gateway

#Get servers
$servers=@(Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"}   -Properties Name | select name | ft -HideTableHeaders)

#Create list of servers
Out-File -FilePath c:\adcomputers.txt -InputObject $servers

#Set WAC delegation
ForEach ($server in $servers)
{
$nodeObject = Get-ADComputer -Identity $server
Set-ADComputer -Identity $nodeObject -PrincipalsAllowedToDelegateToAccount $gatewayObject
}

错误:

Get-ADComputer:无法绑定参数' Identity'。无法转换" Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"类型的值" Microsoft.PowerShell.C ommands.Internal.Format.FormatEndData"输入" Microsoft.ActiveDirectory.Management.ADComputer"。

在C:\ Users \ SA。**** \ Desktop \ inventorize-honolulu-incl-sso.ps1:7 char:40 + $ nodeObject = Get-ADComputer -Identity $ server + ~~~~~~~ + CategoryInfo:InvalidArgument:(:) [Get-ADComputer],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

Set-ADComputer:无法验证参数' Identity'的参数。参数为null。为参数提供有效值,然后再次尝试运行该命令。

在C:\ Users \ SA。**** \ Desktop \ inventorize-honolulu-incl-sso.ps1:8 char:26 + Set-ADComputer -Identity $ nodeObject -PrincipalsAllowedToDelegateToAc ... + ~~~~~~~~~~~ + CategoryInfo:InvalidData:(:) [Set-ADComputer],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADComputer

3 个答案:

答案 0 :(得分:1)

要将服务器列表输出到文本文件,您只需要:

Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"} |
  Select-Object -ExpandProperty Name |
  Out-File "c:\adcomputers.txt"

答案 1 :(得分:0)

Bill_Stewart有正确的想法,它与你正在做的事情完全不符。

这是弄乱你的阵列的ft -HideTableHeaders。请改用select -ExpandProperty

$servers=@(Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"}   -Properties Name | select -ExpandProperty name)

这将为您提供一系列普通字符串,如您所愿。

答案 2 :(得分:0)

您的Get-ADComputer行是一个表达式问题,您在{}中缺少()。解决该问题后,您的示例可以正常运行。

$servers=@(Get-ADComputer -Filter {(OperatingSystem -like "Windows Server*")} -Properties Name | select name | ft -HideTableHeaders)