比较Powershell v1.0中的两组文件夹和文件
我想生成一个报告,其中只突出显示两个目录之间的差异,每个目录位于不同的远程计算机上,并包含子目录和重复的文件名 我需要两份清单:比较Powershell v1.0中的两组文件夹和文件,powershell,powershell-1.0,Powershell,Powershell 1.0,我想生成一个报告,其中只突出显示两个目录之间的差异,每个目录位于不同的远程计算机上,并包含子目录和重复的文件名 我需要两份清单: 只列出目录A中的文件,或者在两台服务器上都有不同的LastWriteTime和最新版本的文件,这些文件位于目录A中 一个只列出目录B中的文件,或者在两台服务器上都有不同的LastWriteTime和最新的文件,它位于目录B中 如果来自不同服务器的两个对象具有相同的NoteProperty(ProjectDir)但不同的LastWriteTime,如何筛选出下面的对
- 只列出目录A中的文件,或者在两台服务器上都有不同的
和最新版本的文件,这些文件位于目录A中LastWriteTime
- 一个只列出目录B中的文件,或者在两台服务器上都有不同的
和最新的文件,它位于目录B中LastWriteTime
NoteProperty
(ProjectDir
)但不同的LastWriteTime
,如何筛选出下面的对象
背景
#Read in files only of project directories
$dirAItems = Get-ChildItem -Recurse -path ' D:\WORKING' | Where-Object {$_.GetType() | where-object -property "Name" -eq "FileInfo"}
$dirBItems = Get-ChildItem -Recurse -path ' E:\WORKING' | Where-Object {$_.GetType() | where-object -property "Name" -eq "FileInfo"}
#Compute relative paths
$dirAItems| foreach-Object {
$_ | Add-Member -MemberType NoteProperty -Name 'ProjectDir' -Value ($_.FullName.Replace("D:\WORKING","PROJECT"))
}
$dirBItems| foreach-Object {
$_ | Add-Member -MemberType NoteProperty -Name 'ProjectDir' -Value ($_.FullName.Replace("E:\WORKING","PROJECT"))
}
#Get the discrepancies and assign to Server1List or Server2List
Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime
$ServerAItemsOfInterest = Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime | Where-Object -Property SideIndicator -eq "<="
$ServerBItemsOfInterest = Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime | Where-Object -Property SideIndicator -eq "=>"
"Server A Items of Interest:"
$ServerAItemsOfInterest
"
Server B Items of Interest:"
$ServerAItemsOfInterest
我有两台服务器,它们有一组文件夹和文件,这些文件夹和文件是独立开发的,当工程师对他们的工作感到满意时,偶尔会进行同步。这些工程师在将他们的工作反映到他们不工作的服务器上时表现不佳。我想生成一份报告,帮助我的团队选择要同步的内容
我尝试过的
#Read in files only of project directories
$dirAItems = Get-ChildItem -Recurse -path ' D:\WORKING' | Where-Object {$_.GetType() | where-object -property "Name" -eq "FileInfo"}
$dirBItems = Get-ChildItem -Recurse -path ' E:\WORKING' | Where-Object {$_.GetType() | where-object -property "Name" -eq "FileInfo"}
#Compute relative paths
$dirAItems| foreach-Object {
$_ | Add-Member -MemberType NoteProperty -Name 'ProjectDir' -Value ($_.FullName.Replace("D:\WORKING","PROJECT"))
}
$dirBItems| foreach-Object {
$_ | Add-Member -MemberType NoteProperty -Name 'ProjectDir' -Value ($_.FullName.Replace("E:\WORKING","PROJECT"))
}
#Get the discrepancies and assign to Server1List or Server2List
Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime
$ServerAItemsOfInterest = Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime | Where-Object -Property SideIndicator -eq "<="
$ServerBItemsOfInterest = Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime | Where-Object -Property SideIndicator -eq "=>"
"Server A Items of Interest:"
$ServerAItemsOfInterest
"
Server B Items of Interest:"
$ServerAItemsOfInterest
我尝试过过滤比较对象结果,但无法找到正确的条件:
$ServerAItemsOfInterest = Compare-Object -ReferenceObject $dirAItems -DifferenceObject $dirBItems -Property ProjectDir, LastWriteTime | Where-Object `
{$_.SideIndicator -eq "<=" #-and `
($dirBItems.ProjectDir -notcontains $_.ProjectDir -or `
($dirBItems.ProjectDir -contains $_.ProjectDir # -and [COMPARE LAST WRITE TIMES SOMEHOW] ))
}
$ServerAItemsOfInterest=Compare Object-ReferenceObject$dirAItems-DifferenceObject$dirBItems-Property ProjectDir,LastWriteTime | Where Object`
{$\.SideIndicator-eq“不确定powershell v1,但类似的东西可能会工作吗
$dirA = Get-ChildItem -Path 'C:\Temp\test1'
$dirB = Get-ChildItem -Path 'C:\Temp\test2'
$listA = $dirA | ForEach-Object {
if ($_.Name -notin $dirB.Name) { return $_ }
$file = $_
if ($_.LastWriteTime -gt ( $dirB.Where( { $file.Name -eq $_.Name }) ).LastWriteTime) { return $_ }
}
$listB = $dirB | ForEach-Object {
if ($_.Name -notin $dirA.Name) { return $_ }
$file = $_
if ($_.LastWriteTime -gt ( $dirA.Where( { $file.Name -eq $_.Name }) ).LastWriteTime) { return $_ }
}
PowerShell 1.0..真的吗?这不是我的选择。我在一家公司工作,在那里,It决策和笔记本电脑构建是在另一个大陆由一个从未与我们部门任何人交谈过的团队做出的。这正是我试图做的。
$dirA = Get-ChildItem -Path 'C:\Temp\test1'
$dirB = Get-ChildItem -Path 'C:\Temp\test2'
$listA = $dirA | ForEach-Object {
if ($_.Name -notin $dirB.Name) { return $_ }
$file = $_
if ($_.LastWriteTime -gt ( $dirB.Where( { $file.Name -eq $_.Name }) ).LastWriteTime) { return $_ }
}
$listB = $dirB | ForEach-Object {
if ($_.Name -notin $dirA.Name) { return $_ }
$file = $_
if ($_.LastWriteTime -gt ( $dirA.Where( { $file.Name -eq $_.Name }) ).LastWriteTime) { return $_ }
}