Powershell Select -String compare总是返回false

时间:2016-12-30 01:49:29

标签: powershell

我已经冒险进入Powershell领域,发现自己陷入了应该是一项简单的任务。我想比较两个包含两个不同文件版本号的字符串。出于某种原因,我的比较总是返回false:

$DLFilePath = "$PSScriptRoot\Download\Update.ini"
$SRCFilePath = "$PSScriptRoot\Original\Update.ini"

#Get File Versions
$DLVersion = Select-String $DLFilePath -pattern "\bVersion" |select line
$SRCVersion = Select-String $SRCFilePath -pattern "\bVersion" |select line

Write-Output "DL Version: " $DLVersion
Write-Output "SRC Version: " $SRCVersion     


if($DLVersion -eq $SRCVersion){
    Write-Output "Files match"

}else {
   Write-Output "Files don't match."
}


--------------Output---------------
    DL Version: 

    Line                                                                                              
    ----                                                                                              
    Version=4.5.2.1233                                                                                
    SRC Version: 
    Version=4.5.2.1233                                                                                
    Files don't match

知道比较失败的原因吗?我原本以为是因为“\ n Line \ n ----”?对于第一个变量,但我无法弄清楚它来自何处。它只出现在我第一次打印其中一个变量时(如果我连续两次打印相同的变量,它将不再显示第二次),所以我认为它与输出函数有关而不是变量本身?此外,如果我逐步完成调试并手动打印出两个变量,它会出现在两个变量上:

[DBG]: PS C:\Users\usr\Desktop>> $DLVersion

Line                                                                                              
----                                                                                              
Version=4.5.2.1233                                                                                



[DBG]: PS C:\Users\usr\Desktop>> $SRCVersion

Line                                                                                              
----                                                                                              
Version=4.5.2.1233  

1 个答案:

答案 0 :(得分:0)

写下@PetSerAl的评论作为答案。

问题是Select-Object默认情况下返回一个或多个PSCustomObject,其相同属性仅设置为使用您选择的属性进行格式化。然后比较最终成为参考比较,而不是值比较。

要使其仅返回您选择的属性的值,您需要使用-ExpandProperty

以下是更新代码:

$DLFilePath = "$PSScriptRoot\Download\Update.ini"
$SRCFilePath = "$PSScriptRoot\Original\Update.ini"

#Get File Versions
$DLVersion = Select-String $DLFilePath -pattern "\bVersion" |Select-Object -ExpandProperty line
$SRCVersion = Select-String $SRCFilePath -pattern "\bVersion" |Select-Object -ExpandProperty line

Write-Output "DL Version: " $DLVersion
Write-Output "SRC Version: " $SRCVersion     


if($DLVersion -eq $SRCVersion){
    Write-Output "Files match."

}else {
   Write-Output "Files don't match."
}