Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Powershell输出属性_Powershell_Output - Fatal编程技术网

更改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