使用PowerShell比较本地文本文件是否相同通常有两种方式:1.通过Get-FileHash这个命令,比较两个文件的哈希是否相同;2.通过Compare-Object这个命令,逐行比较两个文件的内容是否相同。

比较本地文本文件与Web上的文本文件也是同样的2种思路,只不过要首先处理好web上的文件。处理web上的文件也显然有两种思路:1.得到web文件的内容(Invoke-WebRequest),直接在内存中比较;2.得到web文件的内容,再把文件存到本地,转化为本地文件之间的比较。这种方法只需要在得到web文件的内容后,加一步文件写入操作(New-Item, Add-Content)即可,没什么可说的,本文主要讲第1种方式的两种比较方式,为了易于辨识程序的正确性,此处两个文件的内容是相同的。

1.比较两个文件的哈希是否相同

  #获取本地文件的hash(采用MD5)
$path = "C:\local.txt"
$hashLocal = Get-FileHash -Path $path -Algorithm MD5
Write-Output $hashLocal $url = "XXX"
#设置"-ExpandProperty"才能完全返回文本内容
$cotent = Invoke-WebRequest -Uri $url | select -ExpandProperty Content
#转化为Char数组,放到MemoryStream中
$charArray = $cotent.ToCharArray()
$stream = [System.IO.MemoryStream]::new($charArray)
#Get-FileHash还可以通过Stream的方式获取hash
$hashWeb = Get-FileHash -InputStream ($stream) -Algorithm MD5
#注意关闭MemoryStream
$stream.Close()
Write-Output $hashWeb $hashLocal.Hash -eq $hashWeb.Hash

2.逐行比较两个文件的内容是否相同

 $path = "C:\local.txt"
$url = "XXX"
$contentLocal = Get-Content $path
$cotentWeb = Invoke-WebRequest -Uri $url | select -ExpandProperty Content
$diff = Compare-Object -ReferenceObject $($contentLocal) -DifferenceObject $($cotentWeb)
if($diff) {
Write-Output "The content is not the same!"
}

发现运行结果不正确,调试发现 Get-Content(cat)返回值类型是System.Array ,而Invoke-WebRequest 返回值类型是 String

 PS C:\> $item1.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array

PS C:\> $item2.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object

所以需要对Invoke-WebRequest 的返回值类型进行转换

$path = "C:\local.txt"
$url = "XXX"
$contentLocal = Get-Content $path
$cotentWeb = Invoke-WebRequest -Uri $url | select -ExpandProperty Content
#使用正则表达式"\r?\n"消除换行符差异的影响
$cotentWebArray = $cotentWeb -split '\r?\n'
$diff = Compare-Object -ReferenceObject $($contentLocal) -DifferenceObject $($cotentWebArray)
if($diff) {
Write-Output "The content is not the same!"
}

使用PowerShell比较本地文本文件与Web上的文本文件是否相同的更多相关文章

  1. 如果程序集是从 Web 上下载的,即使它存储于本地计算机,Windows 也会将其标记为 Web 文件,http://go.microsoft.com/fwlink/?LinkId=179545

    使用Silverlight,经常弄出很多莫名的XXX文件来于Web,神马信任程序集,就Build个程序都那么麻烦,应该在所有发布时注明一些最基本的配置说明,最BT莫过于连下载程序集的地方都找不到. 若 ...

  2. ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明

    原文:ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 By 李远祥 ArcGIS Por ...

  3. (转)HTML5开发学习(3):本地存储之Web Sql Database

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...

  4. 本地git部署web连接azure的git存储库

    ​​​本地git部署web 创建本地存储仓库 输入以下命令创建git本地仓库(会在当前目录下生产一个.git的目录) git init 然后提交内容 在git仓库所在的目录下存放好需要的网页文件 将文 ...

  5. intelliJ IDEA 怎么添加本地的idea web项目

    概述:这篇文章主要讲述idea开发工具怎么添加本地的idea web项目. 一:首先介绍一下idea web项目的目录结构: 上图详细简单的说了一下idea web项目的文件情况. 二:说明一下部署本 ...

  6. FTP上传和WEB上传的区别

       说区别之前,咱先说说什么是上传?上传就是将信息从个人计算机(本地计算机)传递到中央计算机(远程计算机)系统上,让网络上的人都能看到.将制作好的网页.文字.图片等发布到互联网上去,以便让其他人浏览 ...

  7. 无法加载程序集XXX.dll 此程序集可能是从 Web 上下载的

    错误    13    无法加载程序集 file:///D:\Documents\Downloads\kaxaml-master\kaxaml-master\packages\Prism.4.0.0. ...

  8. 基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传

    前言 九月太忙,只更新了三篇文章,本来这个功能是从九月初就开始做的,结果一直拖到现在国庆假期才有时间完善并且写文章~ 之前我更新了几篇关于 Python 的文章,有朋友留言问是不是不更新 .Net 了 ...

  9. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是c ...

随机推荐

  1. String 源码分析

    Java 源码阅读 - String String 类型看起来简单,实际上背后的复杂性基本可以涵盖了整个 Java 设计,涉及到设计模式(不可变对象).缓存(String Pool 的理念).JVM( ...

  2. delphi中WebBrowser的parent改变时变成空白问题的解决(覆盖CreateWnd和DestroyWnd)

    这段时间在做一个delphi界面打开网页的功能,且此网页所在窗口可完整显示,可缩小到另一个窗口的panel上显示 可是在改变网页所在窗口时,WebBrowser控件变成了空白 上网google了半天, ...

  3. sql执行分页查询

    declare  @PageSize int,@PageIndex int;set @PageSize=5;set @PageIndex=2;WITH Pagination AS(  SELECT * ...

  4. [UWP-小白日记16]UWP中的3D变换API

    原文:[UWP-小白日记16]UWP中的3D变换API 还没开始 好久没写博客了,再来开坑. 正文 Transform3D:“这个和CSS的3D好像的说” PerspectiveTransform3D ...

  5. Win10如何关闭自动更新服务

    原文:Win10如何关闭自动更新服务 第一步: 小娜搜索"gpedit.msc",进入本地计算机策略设置. 第二步: 找到策略位置:本地计算机策略-计算机配置-管理模板-Windo ...

  6. Android系统adb命令查看CPU与内存使用率

     1. 打开终端,进入上述目录,如下图所示:                                                     2. 输入adb shell,打开adb命令行,如 ...

  7. Win10商店芒果TV UWP版更新,新增后台视频下载

    湖南卫视旗下唯一官方视频平台<芒果TV>近日向Win10商店提交了芒果TV UWP V3.0.0版,这次为广大Win10平台用户带来了期待已久的重大功能和更新,可谓是良心厂商,值得鼓励和支 ...

  8. qt截获html请求(继承QNetworkAccessManager和QNetworkReply)

    QtWebkit加载html页面,html中会有很多的请求,比如<img id="testImg" src="http://*.jpg" width=&q ...

  9. C#每天进步一点--引用类型和值类型

    在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对C#没有深入的了解学习,今天我带大家回顾下C#中的引用类型和值类型. CL ...

  10. Qt发展历史及其特点简介(没有哪一种方案能够独霸Windows)

    Qt 是一个跨平台的C++应用程序框架,支持Windows.Linux.Mac OS X.Android.iOS.Windows Phone.嵌入式系统等.也就是说,Qt 可以同时支持桌面应用程序开发 ...