【发布时间】:2019-11-20 01:58:30
【问题描述】:
我想通过PowerShell比较本地文本文件和在线文件,两个文件的内容是一样的。
我知道我必须使用Compare-Object cmdlet 来比较两个文件,我发现我可以通过Invoke-WebRequest cmdlet (https://www.quora.com/How-do-I-download-URL-content-using-Get-Content-in-PowerShell-Script) 获取在线文件的内容。但它没有按预期工作。它只是输出在线版本的文件内容。
$item1 = cat $path
$item2 = Invoke-WebRequest -Uri $URL | select -ExpandProperty Content
# No working as expected
Compare-Object -ReferenceObject $item1 -DifferenceObject $item2
更新
经过调试发现,使用Get-Content(cat)时返回值的类型是System.Array,而使用Invoke-WebRequest时返回值的类型是String。
【问题讨论】:
-
“但它没有按预期工作” 它在做什么?有输出吗?有什么错误吗?
-
@boxdog 我已经稍微更新了描述
-
您的方法不会带来令人满意的结果。比较对象实际上仅有助于比较两个对象的属性,即一个对象是否具有另一个对象没有的属性,并且它检查两个对象是否具有相同名称的属性,如果其值不同。如果您想查看文件之间的确切差异,最好使用 diff 或 git diff 之类的工具。但是,如果您只想知道文件是否相同,则可以下载两者并运行
Get-FileHash来比较它们的校验和。如果它们相同,则文件相同。 -
@megamorf 这是不正确的。
Compare-Object非常适合比较 2 个字符串数组以获得不同的行。
标签: powershell