2017-09-23 37 views
-3

可我們剛剛得到的結果選擇大括號內的一切

edf560af-db87-11e3-80d2-806e6f6e6963 
faadf429-db69-11e3-919f-e0db55bf0b1b

試圖

(Get-WmiObject Win32_Volume |select deviceid) -replace '\D' 
# removes all except numbers 

這裏是CMD

Get-WmiObject Win32_Volume |select deviceid 

deviceid                                            
--------                                            
\\?\Volume{edf560af-db87-11e3-80d2-806e6f6e6963}\                                  
\\?\Volume{faadf429-db69-11e3-919f-e0db55bf0b1b}\                                  
\\?\Volume{faadf42d-db69-11e3-919f-e0db55bf0b1b}\                                  
\\?\Volume{faadf433-db69-11e3-919f-e0db55bf0b1b}\                                  
\\?\Volume{faadf439-db69-11e3-919f-e0db55bf0b1b}\                                  
\\?\Volume{edf560b0-db87-11e3-80d2-806e6f6e6963}\                                  
\\?\Volume{edf560b1-db87-11e3-80d2-806e6f6e6963}\                                  
\\?\Volume{edf560b5-db87-11e3-80d2-806e6f6e6963}\ 

回答

0

即使你嘗試的一個變種無法工作,因爲它也將包括在e量:

PS> (Get-WmiObject Win32_Volume |select -expand deviceid) -replace '[^0-9a-f]' 
ed0addcdf000000000000100000000000 
ed0addcdf000000000000501f00000000 
e775fc6ae9c7511e7b58e10604b928269 
e2367fe0e45e311e6b548806e6f6e6963 

這裏另一個可行的解決方案使用lookarounds

Get-WmiObject Win32_Volume | Select-String '(?<=\{)[0-9a-f\-]+(?=\})' | ForEach-Object {$_.matches.value} 
+1

第一個建議由'Volume'保留'e'(注意所得到的字符串是如何33,而不是32個字符寬) –

0

看起來您只需要捕獲LEFT CURLY BRACKET和RIGHT CURLY之間的十六進制數字托架。

PS C:\src\t> cat .\dsm.ps1 
Get-CimInstance CIM_StorageVolume | 
    Select-Object DeviceID | 
    ForEach-Object { $_ -match ".*{([-0-9a-fA-F]*)}.*" } | 
    ForEach-Object { $matches[1] -replace '-' } 

的輸出是:

PS C:\src\t> .\dsm.ps1 
04ec358ff8bc11e3bac6806e6f6e6963 
04ec3590f8bc11e3bac6806e6f6e6963 
2bd2c32a00000000000090b4e8000000 
c0adb44bbbcc11e5b3e7806e6f6e6963