我写了一个powershell脚本来比较两个文件夹的内容:
$Dir1 ="d:\TEMP\Dir1"
$Dir2 ="d:\TEMP\Dir2"
function Test-Diff($Dir1, $Dir2) {
$fileList1 = Get-ChildItem $Dir1 -Recurse | Where-Object {!$_.PsIsContainer} | Get-Item | Sort-Object -Property Name
$fileList2 = Get-ChildItem $Dir2 -Recurse | Where-Object {!$_.PsIsContainer} | Get-Item | Sort-Object -Property Name
if($fileList1.Count -ne $fileList2.Count) {
Write-Host "Following files are different:"
Compare-Object -ReferenceObject $fileList1 -DifferenceObject $fileList2 -Property Name -PassThru | Format-Table FullName
return $false
}
return $true
}
$i = Test-Diff $Dir1 $Dir2
if($i) {
Write-Output "Test OK"
} else {
Write-Host "Test FAILED" -BackgroundColor Red
}
如果我在 上设置断点Compare-Object
,并在控制台中运行此命令,我会得到差异列表。如果我运行整个脚本,我不会得到任何输出。为什么?
我正在使用 PowerGUI 脚本编辑器,但我也尝试了普通的 ps 控制台。
编辑:
问题是脚本末尾的检查。
$i = Test-Diff $Dir1 $Dir2
if($i) {
Write-Output "Test OK"
...
如果我打电话Test-Diff
不$i =
检查,它的工作原理!
Test-Diff
返回一个对象数组,而不是预期的 bool 值:
[DBG]: PS D:\>> $i | ForEach-Object { $_.GetType() } | Format-Table -Property Name
Name
----
FormatStartData
GroupStartData
FormatEntryData
GroupEndData
FormatEndData
Boolean
如果我用 注释掉该行Compare-Object
,则返回值是一个布尔值,正如预期的那样。
问题是:为什么?