Что-то не так с моим массивом PowerShell? - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь добавить любые группы, в которые входит пользователь, с помощью "MW-" (это работает). Но когда я пытаюсь сделать цикл, чтобы добавить другого пользователя к тем именам групп с «MW-», которые я сохранил в $var, я получаю ошибку

Невозможно связать параметр «Идентичность». Невозможно преобразовать значение "@ {MW-" + $ _. Name = MW-DFS-share1} "в значение типа" Selected.Microsoft.ActiveDirectory.Management.ADGroup "

$var = Get-ADUser -Identity TestUser -Properties memberof |
       Select-Object -ExpandProperty memberof |
       Where {$_ -match "CN=DFS*"} |
       Get-ADGroup -Properties name |
       Select-Object {"MW-"+ $_.name}

foreach ($group in $var) {
    Add-ADGroupMember -Identity $group -Member TestUser
}

Примечание; Когда я запускаю команду Get-ADUser, она выдает следующее:

"MW-"+ $_.name
--------------
MW-DFS-share1
MW-DFS-files
MW-DFS-archive

1 Ответ

1 голос
/ 06 ноября 2019

Рассчитанное свойство - самый простой способ исправить вашу проблему. Затем вам нужно либо развернуть это свойство, либо получить доступ к свойству непосредственно в цикле.

$var = Get-ADUser -Identity TestUser -Properties memberof |
           Select-Object -ExpandProperty memberof |
               Where {$_ -match "CN=DFS*"} |
                   Get-ADGroup -Properties name |
                       Select-Object @{Label='Name';Expression={"MW-"+ $_.name}}

foreach ($group in $var.Name) {
    Add-ADGroupMember -Identity $group -Member TestUser
}

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


Если целью является чтение списка пользователей из файла, а затем обновление каждого пользователячленство, вы можете сделать следующее:

foreach ($user in (Get-Content c:\userlist.txt)) {
    $var = Get-ADUser -Identity $user -Properties memberof |
               Select-Object -ExpandProperty memberof |
                   Where {$_ -match "CN=DFS*"} |
                       Get-ADGroup -Properties name |
                           Select-Object @{Label='Name';Expression={"MW-"+ $_.name}}

    Add-ADPrincipalGroupMembership -Identity $user -MemberOf $var.Name
}

Использование цикла foreach позволяет назначать каждому пользователю переменную во время итерации по списку. Затем на эту переменную можно ссылаться в любой точке цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...