我正在向文件中写入一些内容,然后测试该文件的内容是否返回false;但是the是一样的。
该字符串是一个大的多行字符串。当使用相同的字符串使用相同的代码来执行此代码时,它将按预期工作。
请查看以下测试。我无法解释为什么比较这两个变量会返回false,但compare-object却没有区别。
第二个代码示例显示了预期的行为。
PS H:\DFSMigration> $test = Invoke-Expression -Command "dfscmd.exe /view \\mydomain.com\rootdfs /batchrestore" PS H:\DFSMigration> $test | Set-Content .\backup.txt PS H:\DFSMigration> $test2 = Get-Content .\backup.txt PS H:\DFSMigration> if ($test -eq (Get-Content .\backup.txt)) {"True"} Else{"false"} false PS H:\DFSMigration> if ($test -eq $test2) {"True"} Else{"false"} false PS H:\DFSMigration> Compare-Object -ReferenceObject $test -DifferenceObject $test2 PS H:\DFSMigration> $test.count 2256 PS H:\DFSMigration> $test2.count 2256 PS H:\DFSMigration> $test.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array PS H:\DFSMigration> $test2.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array
这是预期的行为:
PS H:\DFSMigration> $test = "This is a test string with loads of foobar" PS H:\DFSMigration> $test | Set-Content backuptest.txt PS H:\DFSMigration> $test2 = Get-Content backuptest.txt PS H:\DFSMigration> If($test -eq $test2){ "The strings are equal"} Else { "They're not equal"} The strings are equal
答案 0 :(得分:0)
$test
和$test2
是2个不同的数组,因此不相等。如果要遍历数组中的每个元素,您将看到它们包含相同的字符串。
for ($i=0; $i -lt $test.Length; $i++) {
if ($test[$i] -eq $test2[$i]) { "True" } else { "False" }
}
答案 1 :(得分:0)
我将使用Compare-Object
来确定数组是否相同。
默认情况下,它将查找差异并指出包含每个差异的面。因此,如果没有差异,则计数将为0。
请注意,使用此方法时,数组中每个项目的位置均不视为差异。如果应将不同顺序视为不相等,那么For循环将更适合。
$Arr1 = @('apple', 'banana', 'orange','tomato')
$Arr2 = @('tomato', 'potato', 'carrot')
$Arr3 = @('apple', 'banana', 'orange', 'tomato')
$Same = (Compare-Object -ReferenceObject $Arr1 -DifferenceObject $Arr2).count -eq 0
if ($Same) { Write-Host '$Arr1 is equal to $Arr2' -ForegroundColor Cyan } else { Write-Host ':(- $Arr1 is NOT equal to $Arr2'}
$Same = (Compare-Object -ReferenceObject $Arr3 -DifferenceObject $Arr1).count -eq 0
if ($Same) { Write-Host '$Arr1 is equal to $Arr3' -ForegroundColor Cyan }