Возвращает строку функции в качестве параметра добавляемого значения в PowerShell

#function #powershell

#функция #powershell

Вопрос:

Я пытаюсь создать сценарий Powershell, который показывает права доступа к папке и членам групп разрешений. У меня есть функция под названием «Get-Members», которая возвращает (в виде строки, разделенной запятой) членов группы, отправленной функции в качестве аргумента.

Теперь я хотел бы знать, как я могу использовать возвращаемую строку с параметром значения Add-Member. Как я могу использовать функцию с этим? Я пытался

 Add-Member -MemberType NoteProperty -Name "Members" -Value Get-Members($_.IdentityReference) -PassThru
  

но, похоже, это не работает.

Вот и все:

 ($root | get-acl).Access | Add-Member -MemberType NoteProperty -Name "Members" -Value Get-Members($_.IdentityReference) -PassThru  | Add-Member -MemberType NoteProperty -Name "Folder" -Value $($root.fullname).ToString()  -PassThru | select -Property Path, IdentityReference, FileSystemRights
  

И вот функция:

 Function Get-Members {
    param( [string]$group )

    $xyz=$group
    if ($group -match '\')
    {
        $xyz=$group -creplace '^[^\]*\', ''
    }

    $Group = [ADSI]"LDAP://cn=$xyz,ou=SecurityGroups,ou=Accounting,ou=Services,dc=CONTOSO,dc=ny,dc=local"

$Members = $Group.Member | ForEach-Object {[ADSI]"LDAP://$_"}

$combined = $Members | select -ExpandProperty name

$result= $combined -join ","

return $result

}
  

Как я могу заставить это работать?

Ответ №1:

Ваши скобки неверны. Попробуйте это:

 Add-Member -MemberType NoteProperty -Name "Members" -Value (Get-Members $_.IdentityReference) -PassThru
  

Что заставило бы часть Get-Members выполняться первой и возвращать ее значения в -Value свойство из-за скобок.

Кроме того, я бы рекомендовал вам выбрать другое имя вместо Get-Members , потому что оно слишком близко к очень известному Get-Member командлету.

Комментарии:

1. Спасибо за ответ. По какой-то причине $_. Похоже, IdentityReference имеет значение NULL. Я пробовал оба -Value (Get-Members $_.IdentityReference) и -Value (Get-Members $_.IdentityReference.value) , но, похоже, что оба они передают значение NULL для функции. Что может быть причиной этого?

2. Какая часть вашего скрипта заполняется $_ ?

3. Эта часть: ($root | get-acl).Access и вот в чем суть: ($root | get-acl).Access | Add-Member -MemberType NoteProperty -Name "Members" -Value (Get-Members $_.IdentityReference) -PassThru И $root = Get-Item $Path где $Path — это путь к каталогу, например «C:Windows »