Как передать имена компьютеров AD в массив? - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь установить-ADComputer на всех машинах, соответствующих фильтру, который добавляется в массив $ servers. Но это не работает. Я предполагаю, что это как-то связано с передачей объекта в строку, но я не могу разобраться с этим. У кого-нибудь есть золотой совет?

#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: Невозможно связать параметр «Идентичность». Не удается преобразовать значение «Microsoft.PowerShell.Commands.Internal.Format.FormatEndData» типа «Microsoft.PowerShell.C». ommands.Internal.Format.FormatEndData "для ввода" Microsoft.ActiveDirectory.Management.ADComputer ".

На C: \ Users \ SA. **** \ Desktop \ инвентаризация-honolulu-incl-sso.ps1: 7 символ: 40 + $ nodeObject = Get-ADComputer -Identity $ server + ~~~~~~~ + CategoryInfo: InvalidArgument: (:) [Get-ADComputer], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.ActiveDirectory.Management.Commands.GetADComputer

Set-ADComputer: Невозможно проверить аргумент параметра «Идентичность». Аргумент нулевой. Укажите допустимое значение для аргумента и попробуйте снова запустить команду.

На C: \ Users \ SA. **** \ Desktop \ инвентаризация-honolulu-incl-sso.ps1: 8 символ: 26 + Set-ADComputer -Identity $ nodeObject -PrincipalsAllowedToDelegateToAc ... + ~~~~~~~~~~~ + CategoryInfo: InvalidData: (:) [Set-ADComputer], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.ActiveDirectory.Management.Commands.SetADComputer

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

У Билла Стюарта была правильная идея, она просто не вписывалась точно в то, как вы делаете вещи.

Это ft -HideTableHeaders, который портит ваш массив. Используйте select -ExpandProperty вместо:

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

Это даст вам массив простых строк, как вы, кажется, хотите.

0 голосов
/ 07 августа 2018

Ваша строка Get-ADComputer - это проблема с выражением, вы отсутствуют () в {}. Ваш пример работает нормально после исправления этого.

$servers=@(Get-ADComputer -Filter {(OperatingSystem -like "Windows Server*")} -Properties Name | select name | ft -HideTableHeaders)
0 голосов
/ 27 апреля 2018

Чтобы вывести список серверов в текстовый файл, все что вам нужно, это:

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