简短回答:
要获取所有唯一的路径,您应该将$DailyPathsToDelete
输入管道并设置Select-Object
的Unique
开关。
$DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique
较长的答案:
1. 为什么它不能工作
运行您的脚本后,$DailyPathsToDelete
等于 $null
,因为(在您的脚本的第二行中)$DailyPathsToDelete
绑定到参数 Property
。 Select-Object
命令的参数 InputObject
未指定,这就是调用 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. 如何解决问题
使用 Select-Object
命令:
$DailyPathsToDelete = $DailyPathsToDelete | Select-Object -Unique
使用 Sort-Object
:
$DailyPathsToDelete = $DailyPathsToDelete | Sort-Object -Unique
3. 如何不修复它
我建议在您的情况下不要使用Get-Unique
,因为Windows本地文件系统(NTFS,FAT和变体)是不区分大小写的。
例如:
$DailyPathsToDelete = @("C:\temp\IMG000483\","C:\Temp\IMG000483\")
PS C:\> $DailyPathsToDelete | get-unique
C:\temp\IMG000483\
C:\Temp\IMG000483\