2013-04-30 94 views
1

我正在嘗試使用用戶實際名稱替換部分AD專有名稱列中的內容。PowerShell使用正則表達式模式選擇查詢作爲子表達式

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]) 

一個將如何通過使用選擇表達式而不必填充了一個全新的單獨的變量,並與修改後的內容替換原始內容做到這一點?

回答

0

我不明白你爲什麼要滾出去Out-Null。如果我理解你的問題,你正在尋找一種方法來從正則表達式中提取子字符串?你可以使用Select-String;例如:

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

比爾

+0

哦,好,我想我現在明白了一個更好的方式來做到這一點。使用$ _。Identity.DistinguishedName -match「。* \,CN = ExchangeActiveSyncDevices \,(。*)」返回true,這是Out-Null的目的,掩蓋了真實情況,然後我使用了matches變量提取實際的字符串。用你的方法,我們不會返回true-false。我只知道 - 匹配。謝謝! – arodd 2013-05-01 15:33:17