首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell比较-对象与散列只传递$_.SideIndicator,而不是$_.path $_.hash

Powershell比较-对象与散列只传递$_.SideIndicator,而不是$_.path $_.hash
EN

Stack Overflow用户
提问于 2018-12-06 19:48:02
回答 1查看 449关注 0票数 0

我试图在哈希级别上比较两个文件夹。

我得到哈希信息;算法,哈希,路径$SourceDocs和$DestDocs都有算法,哈希,路径。

当我运行比较对象时,唯一传递的值是SideIndicator。

我在没有哈希的情况下运行了这个文件,但是具有相同名称但不同的文件会传递为ok。

代码语言:javascript
复制
cls

$Folder1 = "E:\Backups\Offsite"
$Folder2 = "E:\s3-drive\Backup\Compare"
$Folder3 = "E:\Backups\Temp_transfer"

Write-host 
$time = Get-Date -Format HH:mm
Write-host $time
Write-host $Folder1
Write-host $Folder2
Write-host $Folder3
Write-host 

Write-host 
$time = Get-Date -Format HH:mm
Write-host $time
Write-host "Getting Directory Hash: " $Folder1
$SourceDocs = Get-ChildItem –Path $Folder1 | foreach  {Get-FileHash –Path $_.FullName -Algorithm MD5}
Write-host 
Write-host "Results for: " $Folder1
$SourceDocs
Write-host 

Write-host 
$time = Get-Date -Format HH:mm
Write-host $time
Write-host "Getting Directory Hash: " $Folder2
$DestDocs = Get-ChildItem –Path $Folder2 | foreach  {Get-FileHash –Path $_.FullName -Algorithm MD5}
Write-host 
Write-host 
Write-host "Results for: " $Folder2
$DestDocs
Write-host 

Write-host 
$time = Get-Date -Format HH:mm
Write-host $time
Write-host "Comparing..."
Compare-Object -ReferenceObject $SourceDocs.Hash  -DifferenceObject $DestDocs.Hash -IncludeEqual -Property path, hash, SideIndicator -PassThru

Write-host 
$time = Get-Date -Format HH:mm
Write-host $time
Write-Host "These Files do not require action"  -ForegroundColor Yellow
Compare-Object -ReferenceObject $SourceDocs.Hash -DifferenceObject $DestDocs.Hash -IncludeEqual -Property path, hash, SideIndicator -PassThru |
    Where-Object { $_.SideIndicator -eq '==' } | Select-Object -Property path, hash, SideIndicator |
    foreach-object -process{
    Write-Host $_.path $_.hash $_.SideIndicator}


Write-host 
$time = Get-Date -Format HH:mm
Write-Host "Duplicate Files to"  -ForegroundColor Yellow -NoNewline; Write-Host " " $Folder1 -ForegroundColor Cyan 
Compare-Object -ReferenceObject $SourceDocs.Hash -DifferenceObject $DestDocs.Hash -IncludeEqual -Property path, hash, SideIndicator -PassThru |
    Where-Object { $_.SideIndicator -eq '<=' } | Select-Object -Property path, hash, SideIndicator |
    foreach-object -process{
    Write-Host $_.path $_.hash $_.SideIndicator}


Write-host 
$time = Get-Date -Format HH:mm
Write-Host "Remove Files From"  -ForegroundColor Yellow -NoNewline; Write-Host " " $Folder2 -ForegroundColor Cyan 
Compare-Object -ReferenceObject $SourceDocs.Hash -DifferenceObject $DestDocs.Hash -IncludeEqual -Property path, hash, SideIndicator -PassThru |
    Where-Object { $_.SideIndicator -eq '=>' } | Select-Object -Property path, hash, SideIndicator |
    foreach-object -process{
    Write-Host $_.path $_.hash $_.SideIndicator}

Break

这是输出

代码语言:javascript
复制
11:56
E:\Backups\Offsite
E:\s3-drive\Backup\Compare
E:\Backups\Temp_transfer


11:56
Getting Directory Hash:  E:\Backups\Offsite

Results for:  E:\Backups\Offsite

Algorithm       Hash                                                                   Path                           
---------       ----                                                                   ----                           
MD5             85D3D722185CC02750485DF0E0A7F1B4                                       E:\Backups\Offsite\Offsite_f...
MD5             41BFAAE4B1010D0FD09C669A4707ACF6                                       E:\Backups\Offsite\Offsite_f...
MD5             92641097960F47591B716282D61F7D3C                                       E:\Backups\Offsite\Offsite_f...
MD5             B48374310B920AE3F4C3F26DBC7564B5                                       E:\Backups\Offsite\Offsite_f...
MD5             D41D8CD98F00B204E9800998ECF8427E                                       E:\Backups\Offsite\Offsite_f...
MD5             D41D8CD98F00B204E9800998ECF8427E                                       E:\Backups\Offsite\Offsite_f...
MD5             24DF814C247EDEED55DBF875B2BAE85B                                       E:\Backups\Offsite\Offsite_f...
MD5             4BA69B5F53C40C48C3C032E883CC12EB                                       E:\Backups\Offsite\Offsite_f...


12:14
Getting Directory Hash:  E:\s3-drive\Backup\Compare


Results for:  E:\s3-drive\Backup\Compare
MD5             85D3D722185CC02750485DF0E0A7F1B4                                       E:\s3-drive\Backup\Compare...
MD5             92641097960F47591B716282D61F7D3C                                       E:\s3-drive\Backup\Compare...
MD5             B48374310B920AE3F4C3F26DBC7564B5                                       E:\s3-drive\Backup\Compare...
MD5             24DF814C247EDEED55DBF875B2BAE85B                                       E:\s3-drive\Backup\Compare...
MD5             D41D8CD98F00B204E9800998ECF8427E                                       E:\s3-drive\Backup\Compare...
MD5             0627B4727E2BFE1D1CB7F06B82BFCC5C                                       E:\s3-drive\Backup\Compare...
MD5             4BA69B5F53C40C48C3C032E883CC12EB                                       E:\s3-drive\Backup\Compare...


12:27
Comparing...
85D3D722185CC02750485DF0E0A7F1B4
41BFAAE4B1010D0FD09C669A4707ACF6
92641097960F47591B716282D61F7D3C
B48374310B920AE3F4C3F26DBC7564B5
D41D8CD98F00B204E9800998ECF8427E
D41D8CD98F00B204E9800998ECF8427E
24DF814C247EDEED55DBF875B2BAE85B
4BA69B5F53C40C48C3C032E883CC12EB

12:27
These Files do not require action
  ==
  ==
  ==
  ==
  ==
  ==
  ==

Copy Files to  E:\Backups\Offsite
  <=

Remove Files From  E:\s3-drive\Backup\Compare
  =>

这里的全部想法是比较这两个文件夹并选择以下三个选项之一:

  • ==什么都没有
  • <=拷贝
  • =>删除

如有任何见解,将不胜感激。

更新.

Get-FileHash现在看起来如下所示:

代码语言:javascript
复制
$SourceDocs = Get-ChildItem -path $Folder1 -File | foreach  {
    Get-FileHash –Path $_.FullName -Algorithm MD5
    New-Object PSCustomObject -Property @{
    "DisplayName" = (Split-Path $_.FullName -Leaf -Resolve)}}

由于某些原因,我无法只显示名称,所以我使用了New-Object并强制使用它

比较表也必须加以调整:

代码语言:javascript
复制
$compare = Compare-Object -ReferenceObject $SourceDocs -DifferenceObject $DestDocs -Property Hash -IncludeEqual -PassThru | Select-Object Hash, SideIndicator, Path

代码语言:javascript
复制
$compare = Compare-Object -ReferenceObject $SourceDocs -DifferenceObject $DestDocs -Property Hash -IncludeEqual -PassThru | Select-Object Hash, SideIndicator, DisplayName
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 10:09:43

更新

从你正在比较的部分来看,我认为这会给你想要的结果:

代码语言:javascript
复制
Write-host "Comparing..."
$compare = Compare-Object -ReferenceObject $SourceDocs -DifferenceObject $DestDocs -Property Hash -IncludeEqual -PassThru | Select-Object Hash, SideIndicator, Path
Write-host

$doNothing = $compare | Where-Object { $_.SideIndicator -eq '==' }
if ($doNothing) {
    Write-Host "These Files do not require action" -ForegroundColor Yellow
    $doNothing | Format-Table -AutoSize
}

$doCopy = $compare | Where-Object { $_.SideIndicator -eq '<=' }
if ($doCopy) {
    Write-Host "Copy these files"  -ForegroundColor Cyan
    $doCopy | Format-Table -AutoSize
}

$doDelete = $compare | Where-Object { $_.SideIndicator -eq '=>' }
if ($doDelete) {
    Write-Host "Delete these files"  -ForegroundColor Magenta
    $doDelete | Format-Table -AutoSize
}

为了回答标题中的问题:在您的比较对象语句中,您将它设置为只比较Hash属性,在那里您应该比较完整的对象$SourceDocs$DestDocs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53658634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档