爲什麼下面的代碼返回$null
?我試圖存儲唯一的值。如何從PowerShell中的此數組獲取唯一值?
$DailyPathsToDelete = @("C:\temp\IMG000483\","C:\temp\IMG000483\")
$DailyPathsToDelete = Select-Object $DailyPathsToDelete -Unique
爲什麼下面的代碼返回$null
?我試圖存儲唯一的值。如何從PowerShell中的此數組獲取唯一值?
$DailyPathsToDelete = @("C:\temp\IMG000483\","C:\temp\IMG000483\")
$DailyPathsToDelete = Select-Object $DailyPathsToDelete -Unique
你可以試試:
$unique = $DailyPathsToDelete | Get-Unique
用GET-獨特,疑難雜症 - 獲取唯一是區分大小寫的,你也必須先排序列表!
$DailyPathsToDelete = $DailyPathsToDelete | Sort-Object | Get-Unique
有Select-對象
$DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique
隨着排序,對象
$DailyPathsToDelete = $DailyPathsToDelete | Sort-Object -Unique
簡短回答:
要獲取所有唯一路徑,您應將管道$DailyPathsToDelete
設置爲Select-Object
並設置Unique
開關。
$DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique
較長的答案:
1.爲什麼它不工作
運行腳本$DailyPathsToDelete
後等於$null
,因爲(在腳本的第二行)$DailyPathsToDelete
爲界到參數Property
。 Select-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\
實際上,選擇-Object也是區分大小寫。例如:''temp「,」Temp「|選擇-unique'返回兩個項目,而不是一個。 –
此外,使用Get-Unique必須使用-CaseSensitive參數來排序對象:試試這個 - 「」abc「,」abc「,」def「,」abc「|排序-Case |獲取 - 獨特 - - 有沒有它,你會得到不同的結果! –
@msorens你是對的。有趣的是,我實際上在2011年向PowerShell團隊報告了這種行爲,現在它已添加到幫助主題中。 –