2012-05-19 50 views

回答

3

你可以試試:

$unique = $DailyPathsToDelete | Get-Unique 
3
  1. 用GET-獨特,疑難雜症 - 獲取唯一是區分大小寫的,你也必須先排序列表!

    $DailyPathsToDelete = $DailyPathsToDelete | Sort-Object | Get-Unique

  2. 有Select-對象

    $DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique

  3. 隨着排序,對象

    $DailyPathsToDelete = $DailyPathsToDelete | Sort-Object -Unique

+0

實際上,選擇-Object也是區分大小寫。例如:''temp「,」Temp「|選擇-unique'返回兩個項目,而不是一個。 –

+1

此外,使用Get-Unique必須使用-CaseSensitive參數來排序對象:試試這個 - 「」abc「,」abc「,」def「,」abc「|排序-Case |獲取 - 獨特 - - 有沒有它,你會得到不同的結果! –

+0

@msorens你是對的。有趣的是,我實際上在2011年向PowerShell團隊報告了這種行爲,現在它已添加到幫助主題中。 –

8

簡短回答:

要獲取所有唯一路徑,您應將管道$DailyPathsToDelete設置爲Select-Object並設置Unique開關。

$DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique 

較長的答案:

1.爲什麼它不工作

運行腳本$DailyPathsToDelete後等於$null,因爲(在腳本的第二行)$DailyPathsToDelete爲界到參數PropertySelect-Object cmdlet的參數InputObject未加speficified,這就是爲什麼調用Select-Object的結果爲$null

這可以通過追蹤你的表達很容易地驗證:

Trace-Command -psHost -Name ParameterBinding { Select-Object $DailyPathsToDelete -Unique} 

給出:

DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Select-Object] 
DEBUG: ParameterBinding Information: 0 :  BIND arg [True] to parameter [Unique] 
DEBUG: ParameterBinding Information: 0 :   COERCE arg to  [System.Management.Automation.SwitchParameter] 
DEBUG: ParameterBinding Information: 0 :    Parameter and arg types the same, no coercion is needed. 
DEBUG: ParameterBinding Information: 0 :   BIND arg [True] to param [Unique]  SUCCESSFUL 
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Select-Object] 
DEBUG: ParameterBinding Information: 0 :  BIND arg [System.Object[]] to parameter [Property] 
DEBUG: ParameterBinding Information: 0 :   BIND arg [System.Object[]] to param [Property] SUCCESSFUL 
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Select-Object] 
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing 
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing 

2.如何修復

使用選擇,對象

$DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique 

使用排序,對象

$DailyPathsToDelete = $DailyPathsToDelete | Sort-Object -Unique 

3。如何不修復

我建議不要因爲Windows本地文件系統(NTFS,FAT和變體)在方案中使用Get-Unique不區分大小寫。

實施例:

$DailyPathsToDelete = @("C:\temp\IMG000483\","C:\Temp\IMG000483\") 
PS C:\> $DailyPathsToDelete | get-unique 
C:\temp\IMG000483\ 
C:\Temp\IMG000483\ 
相關問題