powershell - 如何将 2 个属性合并到 AD 对象的单个输出中?
问题描述
我需要将两个属性合并到一列中,用户名在 DisplayName 中,而组名存储在 Name 中,但两种类型的对象都有 DisplayName、Name 属性,所以我需要在一列中显示它们。
Suppose Group is 'Test Group'
CN : …
ObjectGUID : 123-456-XXXX
ObjectClass: group
DisplayName:
Name: 'Test Group'
And 'Test User' Properties are
CN: …
ObjectGUID : 789-456-XXXX
ObjectClass: user
DisplayName: 'Test User'
Name:
我尝试使用 for each 循环,但无法弄清楚 select 语句的使用。
Get-ADGroupMember -Identity $GroupGUID |
ForEach-Object{
if($_.ObjectClass -eq 'User'){
# process user object
$_ | Get-ADUser -Properties DisplayName
}elseif ($_.ObjectClass -eq 'User'){
# process group
$_ | Get-ADGroup -Properties Name
}
}
预期输出需要是
MemberName ObjectGUID
---------------- ------------------
Test Group 123-456-XXXX
Test User 789-456-XXXX
解决方案
我会使用 switch 语句根据它是用户还是组来处理每个项目,然后MemberName
根据它是什么来替换属性:
$Results = Switch(Get-ADGroupMember -Identity $GroupGUID){
{$_.ObjectClass -eq 'User'} {$_ | Get-ADUser -Prop DisplayName | Select *,@{l='MemberName';e={$_.DisplayName}} -ExcludeProperty MemberName}
{$_.ObjectClass -eq 'Group'} {$_ | Get-ADGroup | Select *,@{l='MemberName';e={$_.Name}} -ExcludeProperty MemberName}
}
$Results|Select MemberName,ObjectGUID
或者,如果您真的希望这一切都在管道中完成,您可以这样做:
Get-ADGroupMember -Identity $GroupGUID -PipelineVariable 'Member' | ForEach{If($Member.ObjectClass -eq 'User'){$_ | Get-ADUser -Properties DisplayName}Else{$_ | Get-ADGroup}} | Select @{l='MemberName';e={If($Member.ObjectClass -eq 'User'){$_.DisplayName}Else{$_.Name}}},ObjectGUID
推荐阅读
- javascript - 匹配单词和进行字符
- python-3.x - 无法从 Pool.py 中获取方法“学习”
- javascript - Node.js 需要带有 const 的帮助文件抛出函数未定义错误但使用 var 和 let
- android - 对象未在片段中更新
- swift - 核心数据 - 通过属性获取和过滤一对多关系
- variables - MiniZinc 决策变量非连续范围
- python-3.x - 我想从第一行代码将我的用户重定向到一个特定的问题,我该怎么做?
- java - 内部类是否使封装的概念无效?
- reactjs - Kendo ui Grid Footer React
- java - 当我尝试从服务器下载 gpx 文件并解析它时,InputStream 为空