更改Powershell输出属性
我正在编写一个脚本,将两个目录的内容与同名文件进行比较,并返回不同的文件。我用来确定文件是否不同的更改Powershell输出属性,powershell,output,Powershell,Output,我正在编写一个脚本,将两个目录的内容与同名文件进行比较,并返回不同的文件。我用来确定文件是否不同的属性是LastWriteTime和Size 以下是我当前的脚本: $var1 = Get-ChildItem -path C:\proj\BIN\ -Recurse $var2 = Get-ChildItem -path C:\proj2\BIN\ -Recurse Compare-Object -ReferenceObject $var1 -DifferenceObject $var2 -Pr
属性是LastWriteTime
和Size
以下是我当前的脚本:
$var1 = Get-ChildItem -path C:\proj\BIN\ -Recurse
$var2 = Get-ChildItem -path C:\proj2\BIN\ -Recurse
Compare-Object -ReferenceObject $var1 -DifferenceObject $var2 -Property Name, LastWriteTime, Size | Sort-Object Name
这是我当前的输出:
Name LastWriteTime Size SideIndicator
---- ------------- ---- -------------
folder1 6/1/2018 3:20:37 PM =>
folder1 5/21/2018 12:08:36 PM <=
folder2 6/1/2018 3:20:37 PM =>
folder2 5/21/2018 12:08:36 PM <=
CustomReports 6/1/2018 3:20:37 PM =>
CustomReports 5/21/2018 12:08:39 PM <=
folder3 6/1/2018 3:20:38 PM =>
folder3 5/21/2018 12:08:38 PM <=
blank.XML 6/1/2018 3:37:49 PM =>
blank.XML 11/22/2017 12:36:04 PM <=
根据我的理解,脚本应该根据名称、lastWriteTime、大小
比较对象
,并根据这些结果按名称
排序对象
,然后从这些结果返回全名、lastWriteTime、大小
我的新输出是:
FullName LastWriteTime Size
-------- ------------- ----
6/1/2018 3:20:37 PM
5/21/2018 12:08:36 PM
6/1/2018 3:20:37 PM
5/21/2018 12:08:36 PM
6/1/2018 3:20:37 PM
5/21/2018 12:08:39 PM
6/1/2018 3:20:38 PM
如果将-Property
与比较对象
一起使用,则输出对象仅具有指定的属性
通过[1]传递输入对象的步骤
,添加-PassThru
开关
在您的情况下,这将使.FullName
属性在比较对象
/排序对象
的输出上可用
总而言之:
Compare-Object $var1 $var2 -PassThru -Property Name, LastWriteTime, Length |
Sort-Object Name |
Format-Table FullName, LastWriteTime, Length
[1] 使用-PassThru
传递的对象会增加.SideIndicator
NoteProperty
成员(一个由PowerShell添加静态值的属性),因此您仍然可以按哪一方过滤输出对象(-ReferenceObject
与-DifferenceObject
)给定的对象对于是唯一的。与其尝试对多个属性进行比较,不如只对内容的哈希进行比较。大概是这样的:
$var1 = Get-ChildItem -path C:\proj\BIN\ -Recurse -File | Get-FileHash -Algorithm SHA1 | Sort Hash
$var2 = Get-ChildItem -path C:\proj2\BIN\ -Recurse -File | Get-FileHash -Algorithm SHA1 | Sort Hash
Compare-Object -ReferenceObject $var1 -DifferenceObject $var2 -Property Hash, {Split-Path $_.Path -leaf} -PassThru
[System.IO.FileInfo]
实例没有.Size
属性,只有.Length
属性<代码>[System.IO.DirectoryInfo]
实例(目录或文件夹)两者都没有。谢谢!实施了它,并立即看到了变化。很高兴听到它;当有疑问时,将命令的输出输送到Get Member
,以检查其成员(属性和方法)。
$var1 = Get-ChildItem -path C:\proj\BIN\ -Recurse -File | Get-FileHash -Algorithm SHA1 | Sort Hash
$var2 = Get-ChildItem -path C:\proj2\BIN\ -Recurse -File | Get-FileHash -Algorithm SHA1 | Sort Hash
Compare-Object -ReferenceObject $var1 -DifferenceObject $var2 -Property Hash, {Split-Path $_.Path -leaf} -PassThru