PowerShell - проблема с подстрокой в ​​конвейере - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь заменить описание пользователя подстрокой его описания. Я хочу, чтобы это были только первые 10 букв. Я пытаюсь так:

Get-ADUser abc -Properties description | Set-ADUser -Description "($($PSItem.Description).substring(0,10))"

Можете ли вы дать мне подсказку, как заставить это работать?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

этот дает хороший вывод:

Get-ADUser abc -Properties Description | foreach { Write-Output "$($PSItem.Description.SubString(0,10))" }

Но этот не:

Get-ADUser abc -Properties Description | Set-ADUser -Description "$($PSItem.Description.SubString(0,10))"

он выдает ошибку вроде этого:

Вы не можете вызвать метод для выражения с нулевым значением В строке: 1 символ: 71 + ... вкл | Set-ADUser -description "$ ($ PSItem.description.SubString (0,10))" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull Set-ADUser: replace В строке: 1 символ: 44 + ... scription | Set-ADUser -description "$ ($ PSItem.description.SubString (... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (CN = ab c ... C = DOMAIN, DC = com: ADUser ) [Set-ADUser], ADInvalidOperationException + FullyQualifiedErrorId: ActiveDirectoryServer: 0, Microsoft.ActiveDirectory.Management.Commands.SetADUser

0 голосов
/ 28 января 2020

Вы никогда не упоминали, как это не работает для вас, но я предполагаю, что это потому, что ваш метод SubString никогда не вызывается, а вместо этого интерпретируется как текст в вашей строке. Вместо этого попробуйте изменить следующую строку и посмотреть, соответствует ли она ожиданиям.

Сначала вы можете попробовать ее, просто записав вывод на экран, а не (потенциально) обновляя объект AD с неверным значением.

Get-ADUser -abc -Properties Description | foreach { Write-Output "$($PSItem.Description.SubString(0,10))" }

А затем запустите свою линию, как только вы убедитесь, что у вас есть то, что вам нужно.

Get-ADUser -abc -Properties Description | Set-ADUser -Description "$($PSItem.Description.SubString(0,10))"
...