在 PowerShell 中更改输出结果

Change output results in PowerShell

我想获取分配了特定令牌的所有用户 ID。

当我 运行 我的脚本时现在看起来像这样..

Get-ADUser -Filter * -Properties * | Select-Object vasco-LinkUserToDPToken, displayname 

#Output#

vasco-LinkUserToDPToken Displayname

{CN=VES0423061,OU=br... User X           
{}                      User X                
{}                      User X           
{CN=0067511310,OU=br... User X                
{CN=0067077717,OU=br... User X 


Example of a full vasco-LinkUserToDPToken : 
{CN=VES0976944,OU=Internal Users,DC=mgm,DC=agf,DC=be}

问题是我只想过滤 VES + 它应该像这样显示(不包含不以 VES 开头的空字符串或标记):

VES0423061  User X

看起来你的 属性 'vasco-LinkUserToDPToken' 是一个多值 属性 类型(字符串数组),你需要从中提取 DN。

你可以试试:

Get-ADUser -Filter "vasco-LinkUserToDPToken -like 'CN=VES*'" -Properties 'vasco-LinkUserToDPToken', DisplayName | 
Select-Object @{Name = 'vasco-LinkUserToDPToken'; Expression = {
    ($_.'vasco-LinkUserToDPToken' | Where-Object {$_ -match '^CN=VES.*'}) -replace '.*(VES[^,]+).*', ''}
}, DisplayName

P.S。使用 -Properties * 总是一个坏主意,因为您所追求的只是两个属性。使用 * 强制下拉所有属性,这是浪费时间


如果 -Filter 不适用于此自定义 属性,您始终可以在之后使用 Where-Object 子句,例如:

Get-ADUser -Filter * -Properties 'vasco-LinkUserToDPToken', DisplayName | 
Where-Object { $_.'vasco-LinkUserToDPToken' -like 'CN=VES*' } |
Select-Object @{Name = 'vasco-LinkUserToDPToken'; Expression = {
    ($_.'vasco-LinkUserToDPToken' | Where-Object {$_ -match '^CN=VES.*'}) -replace '.*(VES[^,]+).*', ''}
}, DisplayName