#powershell #calculated-columns
Вопрос:
Есть ли способ получить значение имени столбца для вычисляемого столбца внутри блока выражения?
Я хочу добавить пользовательский столбец Select-Column
, но я не хочу повторять имя группы в частях имени и выражения, чтобы избежать опечаток. Ни то, ни другое использование нескольких переменных не является чистым способом.
...,
@{Name="Administrators";Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group "Administrators"}},
@{Name="Domain Admins";Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group "Domain Admins"}},
@{Name="Enterprise Admins";Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group "Enterprise Admins"}},
@{Name="Schema Admins";Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group "Schema Admins"}}
Ответ №1:
Нет — Expression
блок сценария не знает о своей заключающей хэш-таблице в контексте вычисляемого свойства, поэтому он не может запросить Name
запись этой хэш-таблицы.
Однако вы можете уменьшить дублирование, заранее объявив массив имен свойств и сославшись на него как в Name
записях, так и Expression
в записях:
$propNames = 'Administrators', 'Domain Admins', 'Enterprise Admins', 'Schema Admins'
... | Select-Object `
@{Name=$propNames[0]; Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group $propNames[0]}},
@{Name=$propNames[1]; Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group $propNames[1]}},
@{Name=$propNames[2]; Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group $propNames[2]}},
@{Name=$propNames[3]; Expression={Test-ADGroupMembership -User $_.sAMAccountName -Group $propNames[2]}}
Если вы чувствуете себя предприимчивым, вы можете автоматизировать процесс создания хэш-таблиц:
$calcProps =
('Administrators','Domain Admins','Enterprise Admins','Schema Admins').ForEach({
@{
Name = $_
Expression = [scriptblock]::Create(
'Test-ADGroupMembership -User $_.sAMAccountName -Group "{0}"' -f $_
)
}
})
... | Select-Object $calcProps