2014-05-04 29 views
0

我創建以下相同內容的數組:數組的數量似乎不一致的,如果有一個數組只有一個元素是

$disk = @("C:","C:","C:") 

當我刪除了所有的副本,並顯示在多少數量數組沒有顯示任何內容,但有一個元素。

$disk = $disk | select -uniq 

PS D:\powershell> write-output $disk 
C: 

PS D:\powershell> $disk.count 
PS D:\powershell> 

它看起來不再是一個數組,而是一個字符串,如下圖所示:

PS D:\powershell> write-output $disk[0] 
C 
PS D:\powershell> write-output $disk[1] 
: 

我需要的是刪除所有的重複即使有隻離開了,這一個元素應該保持陣列。

回答

3

是的,你是正確的,$disk就成了一個字符串:

PS > $disk = @("C:","C:","C:") 
PS > $disk = $disk | select -uniq 
PS > $disk.GetType() 

IsPublic IsSerial Name          BaseType          
-------- -------- ----          --------          
True  True  String         System.Object         

PS > $disk.Length 
2 
PS > 

要解決這個問題,告訴PowerShell中通過封閉它@(...)治療結果作爲數組:

PS > $disk = @("C:","C:","C:")  
PS > $disk = @($disk | select -uniq) 
PS > $disk.GetType() 

IsPublic IsSerial Name          BaseType          
-------- -------- ----          --------          
True  True  Object[]         System.Array         

PS > $disk 
C: 
PS > $disk.Length 
1 
PS > 
+0

謝謝非常多的iCodez!那很簡單! –

+0

@iCodez ...再次感謝..done ... :) –

+1

這是一個快捷方式,你應該堅持iCodez的答案,但在PowerShell 3和更高版本中,如果不存在count屬性,則會添加一個count屬性。請參閱http://technet.microsoft.com/en-us/library/hh847751.aspx(ctrl + f'count')。 –

相關問題