PowerShell选择查询使用正则表达式作为子表达式

时间:2013-04-30 23:12:22

标签: regex powershell

我正在尝试使用用户实际名称来替换部分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] }}

一旦你试图这样做就会崩溃,因为我假设你不允许使用;在Get-ADUser中提供该身份参数时,打破下一个命令。

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

如何通过使用select表达式来完成此操作,而无需填充整个新的单独变量并用修改后的内容替换原始内容?

1 个答案:

答案 0 :(得分:0)

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

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

比尔