1

我正在尝试使用用户实际名称替换部分 AD 专有名称列的内容。

IE:

$_.identity.DistinguishedName 中的模式

CN=Touchdown§3939303030313134393535383932,CN=ExchangeActiveSyncDevices,CN=Guy\, Some,OU=Employees,OU=Departments and Categories,DC=something,DC=com

一个行不通的班轮

$devices | Select @{N="Name";E={ (Get-AdUser -Identity ($_.Identity.DistinguishedName -match ".*\,CN=ExchangeActiveSyncDevices\,(.*)" | Out-Null; $Matches[1])).Name }}

仅此一项有效....

$devices[0].Identity.DistinguishedName -match ".*\,CN=ExchangeActiveSyncDevices\,(.*)" | Out-Null; $Matches[1]

和显示...

CN=Guy\, Some,OU=Employees,OU=Departments and Categories,DC=something,DC=com

这也有效,这类似于我想要实现的目标,但不允许我使用 DistinguishedName 并查找实际名称。

$devices | Select @{N="Name";E={ $_.Identity.DistinguishedName -match ".*\,CN=ExchangeActiveSyncDevices\,(.*)" | Out-Null; $Matches[1] }}

一旦您尝试这样做,它就会崩溃,因为我假设您不允许使用 a ; 在 Get-ADUser 中输入该标识参数时中断到下一个命令。

Get-ADUser -Identity ($devices[0].Identity.DistinguishedName -match ".*\,CN=ExchangeActiveSyncDevices\,(.*)" | Out-Null; $Matches[1])

如何通过使用选择表达式来实现这一点,而不必填充一个全新的单独变量并用修改后的内容替换原始内容?

4

1 回答 1

0

我不明白你为什么要使用 Out-Null。如果我理解您的问题,您是否正在寻找一种从正则表达式中提取子字符串的方法?您可以使用选择字符串;例如:

"Hello, world" | Select-String '^\S+, (\S+)' | ForEach-Object {
  $_.Matches[0].Groups[1].Value
}
# outputs "world"

账单

于 2013-04-30T23:31:53.897 回答