使用PowerShell比较本地文本文件是否相同通常有两种方式:1.通过Get-FileHash这个命令,比较两个文件的哈希是否相同;2.通过Compare-Object这个命令,逐行比较两个文件的内容是否相同。
比较本地文本文件与Web上的文本文件也是同样的2种思路,只不过要首先处理好web上的文件。处理web上的文件也显然有两种思路:1.得到web文件的内容(Invoke-WebRequest),直接在内存中比较;2.得到web文件的内容,再把文件存到本地,转化为本地文件之间的比较。这种方法只需要在得到web文件的内容后,加一步文件写入操作(New-Item, Add-Content)即可,没什么可说的,本文主要讲第1种方式的两种比较方式,为了易于辨识程序的正确性,此处两个文件的内容是相同的。
1.比较两个文件的哈希是否相同
1 #获取本地文件的hash(采用MD5) 2 $path = "C:\local.txt" 3 $hashLocal = Get-FileHash -Path $path -Algorithm MD5 4 Write-Output $hashLocal 5 6 $url = "XXX" 7 #设置"-ExpandProperty"才能完全返回文本内容 8 $cotent = Invoke-WebRequest -Uri $url | select -ExpandProperty Content 9 #转化为Char数组,放到MemoryStream中 10 $charArray = $cotent.ToCharArray() 11 $stream = [System.IO.MemoryStream]::new($charArray) 12 #Get-FileHash还可以通过Stream的方式获取hash 13 $hashWeb = Get-FileHash -InputStream ($stream) -Algorithm MD5 14 #注意关闭MemoryStream 15 $stream.Close() 16 Write-Output $hashWeb 17 18 $hashLocal.Hash -eq $hashWeb.Hash