2016-04-19 29 views
0

我遇到了以下問題,使用trim。它正在刪除一些GUID。我想只是得到這個GUID。如果有人能夠幫助它,我們會很感激。謝謝你的進步。從字符串中解析GUID

((Get-ADOrganizationalUnit -Filter {Name -eq "OUName"} -Properties LinkedGroupPolicyObjects,gplink) | ForEach-Object {if($_.GPlink){$_.GPlink.Split(",") | ForEach-Object {if($_ -like 'DC=DCNAME*'){if($_.length -gt 10){(((($_).trim('DC=DCNAME;0][LDAP://cn={')).trim('}'))) }} }}}) 

我的輸出是這樣的:

754FF9F1-078A-4E05-913D-4F36572B2FC6 
EDDAAB18-2BA6-42E6-A5EC-21B0227BE71A 
7DF312DB-EB73-418E-8F64-3E391F4639B7 
6E3512-4100-48A3-9A65-4DA17A0E2D87 
72EF89D6-2C57-40AC-A116-2CAD89F453ED 
2][LDAP://cn={31BB7749-F6DC-4098-8F10-9D8B4B0F0C0A 
78528B0-F379-4E8F-A166-ACE1448AF9B2 
+0

我相信我只是想念一些東西?我相信我應該使用'-match'和正則表達式 – Fidelis

+1

一些建議:將中間結果存儲在變量中,執行多個步驟。這使您可以檢查中間結果並瞭解哪一步不能按預期工作。使用Replace()而不是Trim()可能會更方便地去掉你不想要的部分。 –

+0

@MartinMaat - 感謝您的洞察力!我非常感謝! – Fidelis

回答

1

沒有你輸入我不能肯定,但你可以嘗試這樣的

Get-ADOrganizationalUnit -Filter {Name -eq 'OUName'} -Properties LinkedGroupPolicyObjects, gplink | ForEach-Object { 
    if ($_.GPlink) { 
     $_.GPlink.Split(',') | ForEach-Object { 
      if ($_ -like 'DC=DCNAME*' -and $_.length -gt 10) { 
       #$_ = $_ -replace 'DC=DCNAME;\d+\]\[LDAP:\/\/cn=\{' 
       #$_.trim('}') 
       $_ -replace '^.*([a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}).*$', '$1' 
      } 
     } 
    } 
} 
+0

這是對的錢。 '$ _ -replace'^。*([a-f0-9] {8} - (?:[a-f0-9] {4} - ){3} [a-f0-9] {12}) 。* $','$ 1''感謝您的幫助,非常感謝。我需要更熟悉REGEX ....你碰巧知道任何可以向我解釋REGEX的好站點嗎? – Fidelis

+0

Regex101.com。它解釋每個角色並顯示實時結果。 –

+0

我也從http://www.regular-expressions.info/ –

2

的東西我不知道怎麼說DC=..過濾器正在幫助你。 DC=部分是在guid之後出現的,所以既然你在,上分裂,那麼當你與-like 'DC=DCNAME*'匹配時,第一個GUID是不會被忽略的?防爆。

[LDAP:// CN = {7BE35F55-E3DF-4D1C-8C3A-38F81F451D86},CN =策略,CN =系統,DC = wingtiptoys,DC =本地; 2] [LDAP:// CN = {7BE35F55-E3DF-4D1C-8111111},CN = ......

如果你只是想提取的GUID,我只想extact {GUID},如:

Get-ADOrganizationalUnit -Filter {Name -eq "OUName"} -Properties LinkedGroupPolicyObjects, gplink | 
ForEach-Object { 
    if($_.GPlink) { 
     #Anything between { and } 
     [regex]::Matches($gplink,'(?<=\{).*?(?=\})') | ForEach-Object { $_.Value } 
    } 
} 
+0

瞭解了很多,是的,你有一個很好的觀點。謝謝你的提示! – Fidelis