2012-05-19 52 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\ 
相关问题