#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 »