Надеюсь, вопрос PowerShell noob, но как мне получить доступ к текущему объекту конвейера внутри блока сценария, который также находится в хэш-таблице?PowerShell Pipeline Script Block внутри Hashtable
Вот что я пытаюсь сделать в полном объеме:
Get-ADGroupMember "Group Name" |
Where {$_.objectClass -eq "user"} |
Get-ADUser -properties extensionAttribute1 |
Where {$_.extensionAttribute1 -ne ($_.UserPrincipalName -replace "@ADdomain.com", "@GAdomain.com")} |
Set-ADUser -replace @{extensionAttribute1=&{$_.UserPrincipalName -replace "@ADdomain.com", "@GAdomain.com"}}
У меня все работает на эту последнюю строку, где новый extensionAttribute1
должен быть сформирован из текущих пользователей UserPrincipalName
за исключением, заменяющий домен , Запуск этот код приводит к ошибке:
+ Set-ADUser <<<< -replace @{ExtensionAttribute1=&{$_.UserPrincipalName -replace "@ADdomain.com", "@GAdomain.com"}}
+ CategoryInfo : InvalidOperation: (CN=Bar\, Fo...ADdomain,DC=com:ADUser) [Set-ADUser], ADInvalidOperationException
+ FullyQualifiedErrorId : replace,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Замена кода внутри блока сценария со строкой работает нормально (ниже), так что кажется, что какой-то вопрос доступа к текущему объекту конвейера. $_
не работает в этом случае?
Set-ADUser -replace @{extensionAttribute1=&{"foobar"}}
Я думаю, что здесь происходит то, что Set-ADUser принимает пакет информации сразу и поэтому похож на вызов '$ MyArrayOfUsers | Set-ADUser ... 'где единственным объектом в конвейере является массив, а не каждый пользователь (я предполагаю). Если вместо этой строки вместо последней строки следует 'Foreach-Object {Set-ADUser $ _ [email protected]{extensionAttribute1=&{$_.UserPrincipalName -replace" @ ADdomain.com "," @ GAdomain.com "}}}' та работа? Это означает, что нужно много индивидуальных вызовов вместо одного большого звонка, но я думаю, что это должно сработать.Я не могу проверить это прямо сейчас, но дайте мне знать, если это сработает. – squid808
@ squid808 Да, это действительно работает. Странно, так что '$ _' действителен только для некоторых команд? – Panman
Я думаю, что это больше о том, как вы его используете, поскольку оно представляет одно значение, 'this'. Я отвечу свои размышления в ответ, чтобы я мог быть немного более подробным. – squid808