Доступ к значению имени в блоке выражений

#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