标签: compareobject

比较对象仅左侧或右侧

快速问题

是否有更好的(即更有效/更简洁)的方法来做到这一点?

compare-object $a $b | ?{$_.SideIndicator -eq '<='}
Run Code Online (Sandbox Code Playgroud)

详情

Compare-Object给出参数-excludeDifferent-includeEqual允许您修改得到的结果.

  • 使用两者为您提供内部联接
  • 使用只是-includeEqual给你一个完整的外部联接
  • 使用只是-excludeDifferent毫无意义; 因为默认情况下会排除相等的项目,因此它现在将排除所有内容.

有对没有选项-includeLeft,-excludeLeft或类似的.

目前要做右侧为空的左外连接(即参考对象中不在差异对象中的项目)我需要手动过滤结果,如上面的代码所示.

我错过了什么/有更好的方法吗?

http://ss64.com/ps/compare-object.html

powershell diff left-join right-join compareobject

7
推荐指数
1
解决办法
5992
查看次数

PowerShell:函数没有正确的返回值

我写了一个powershell脚本来比较两个文件夹的内容:

$Dir1 ="d:\TEMP\Dir1"
$Dir2 ="d:\TEMP\Dir2"

function Test-Diff($Dir1, $Dir2) {
    $fileList1 = Get-ChildItem $Dir1 -Recurse | Where-Object {!$_.PsIsContainer} | Get-Item | Sort-Object -Property Name
    $fileList2 = Get-ChildItem $Dir2 -Recurse | Where-Object {!$_.PsIsContainer} | Get-Item | Sort-Object -Property Name

    if($fileList1.Count -ne $fileList2.Count) {
        Write-Host "Following files are different:"
        Compare-Object -ReferenceObject $fileList1 -DifferenceObject $fileList2 -Property Name -PassThru | Format-Table FullName
        return $false
    }

    return $true
}

$i = Test-Diff $Dir1 $Dir2

if($i) { 
    Write-Output "Test OK" 
} else { 
    Write-Host "Test FAILED" -BackgroundColor …
Run Code Online (Sandbox Code Playgroud)

powershell function compareobject

6
推荐指数
1
解决办法
1万
查看次数

使用PowerShell查找字符串的差异

所以我正在使用 Compare-Object,它对于比较文件效果很好。但如果只是字符串呢?有没有办法找出字符串之间的差异?CompareTo() 擅长报告存在差异,但不报告差异是什么。例如:

PS:> $a = "PowerShell rocks"
PS:> $b = "Powershell rocks"
PS:> $a.CompareTo($b)
1
PS:> Compare-Object -ReferenceObject $a -DifferenceObject $b
PS:>
Run Code Online (Sandbox Code Playgroud)

什么也没有返回。

有什么方法可以让我了解字符串之间的实际差异,而不仅仅是存在差异?

string powershell compareto difference compareobject

5
推荐指数
1
解决办法
1万
查看次数

Powershell比较对象格式输出

这是我写的脚本:

function Compare {

    $file1 = Read-Host "Please enter the path of the first file you would like to compare"
    $file2 = Read-Host "Please enter the path of the second file you would like to compare"

    $outFile = Read-Host "Please enter the path to where you would like your output file."

    Try{
        $compareOne = Get-Content $file1
        $comparetwo = Get-Content $file2
    } 
    Catch{
        Write-Host "The path you entered is either invalid or the file does not exist. "    
    }

    Write-Host "Beginning …
Run Code Online (Sandbox Code Playgroud)

powershell output compareobject

4
推荐指数
1
解决办法
2万
查看次数

在比较对象中替换 SideIndicator 的箭头

我可以将 SideIndicators 的输出更改为Compare-Object对标准用户更用户友好的结果吗?

我有一个脚本,可以比较我们软件的 2017 版本和当前 2018 版本的文件夹。

$var1 = Get-ChildItem -Recurse -path C:\software18\bin
$var2 = Get-ChildItem -Recurse -path C:\software17\bin
Compare-Object -ReferenceObject $var1 -DifferenceObject $var2 > C:\diff.txt
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

InputObject           SideIndicator
-----------           -------------
thing.dll                 =>
stuff.dll                 <=
software.exe              <=
Run Code Online (Sandbox Code Playgroud)

该报告已提供给测试人员,如果我可以将 SideIndicators 更改为文本,对他们来说会更清晰。

我想要的输出:

InputObject           SideIndicator
-----------           -------------
thing.dll                Not in 18
stuff.dll                Not in 17
software.exe             Not in 17
Run Code Online (Sandbox Code Playgroud)

或者类似的东西,他们可以在不必知道哪个是引用/差异对象的情况下获得它的要点。

我有一个初步的想法,但搜索类似的东西并不会产生很多结果。不知道是不是一定要if循环,还是可以把PS里的括号换掉。对 PS 还是新手,所以我非常感谢您的帮助!

powershell compareobject

2
推荐指数
1
解决办法
5168
查看次数

比较对象并包含未在输出中进行比较的属性

我正在使用Compare-Objectcmdlet比较来自不同来源(不同列/属性名称)的两个 CSV 文件。如何在输出中包含任一 CSV 文件中的属性而不将它们包含在比较中?

CSV 数据示例

用户1.csv

电子邮件地址,姓名,侧面
luke@sw.com,Luke,light

用户2.csv

电子邮件地址、受雇者、爱好
lando@sw.com,5/2/17,Sabacc

以下为我提供了一个包含电子邮件地址和侧面指示符的列,但是在比较中如何获取$Users1.name$Users2.hiredate不使用它们?

$Users1 = Import-Csv users1.csv
$Users2 = Import-Csv users2.csv

Compare-Object $Users1 $Users2 -Property "E-mail-Address"
Run Code Online (Sandbox Code Playgroud)

我想要类似的输出:

电子邮件地址 | 侧面指示器 | 姓名 | 雇用日期
---------------|------------------------------|------|---------
luke@sw.com | <= | 卢克 |
lando@sw.com | => | | 5/2/17

csv powershell compareobject

1
推荐指数
1
解决办法
2345
查看次数

找出两个非常大的列表中的不同之处

我有两个列表,每个列表大约有 1k 人。我要做的就是找出两者之间剩下的是谁。

$BunchoEmail = Import-Csv C:\temp\Directory.csv | Select-Object primaryEmail -ExpandProperty primaryEmail

$GoogleUsers = gam print users fields suspended | ConvertFrom-Csv | Where-Object suspended -ne $true | Select-Object primaryEmail -ExpandProperty primaryEmail

$objects = @{
    ReferenceObject  = $GoogleUsers
    DifferenceObject = $BunchoEmail
}
Compare-Object @objects
Run Code Online (Sandbox Code Playgroud)

以上没有产生我想要的。

找到不同之处的最佳方法是什么?

powershell set-difference compareobject

1
推荐指数
1
解决办法
56
查看次数