比较两个csv文件并找出差异

时间:2012-01-10 07:20:34

标签: powershell

我是PowerShell世界的新手,我在PowerShell上有一些关于库存调节的项目。

我不知道如何继续这个,我尝试了一些基本步骤,我可以导出

用户/群组/群组成员资格。

以下是要求:

  • 现在我取得了什么 - 感谢Govnah

AD查询:

Get-QADUser -searchRoot $OuDomain -SizeLimit 0 |
Select-Object dn, sAMAccountName, @{Name="Groups";Expression={(Get-QADMemberOf $_ | Select-Object -expandProperty Name) -join ";"}} | 
Sort-Object SamAccountName | 
export-csv $FilePath

我现在有两个csv文件,例如AD_users.csvOracle_users.csv

我想比较两个文件并重定向差异,如

Oracle中不存在AD用户 AD中不存在Oracle用户

示例数据

AD_users.csv

u388848993
K847447388
u994888484

Oracle_users.csv

k095848889
u388848993

我可以查询oracle数据库,AD查询也很好,唯一值得关注的是我无法比较输出。

1 个答案:

答案 0 :(得分:4)

我在我写的脚本中做了类似的事情:

[System.Collections.ArrayList]$adlist = Get-Content c:\users\sverker\desktop\ad.csv |Sort-Object
[System.Collections.ArrayList]$oraclelist = Get-Content c:\users\sverker\desktop\oracle.csv |Sort-Object
$Matching_numbers = @()

ForEach ($number in $adlist)
{
  if ($oraclelist.Contains($number))
  {
        $Matching_numbers += $number
  }
}
ForEach ($number in $Matching_numbers)
{
  $adlist.Remove($number)
  $oraclelist.Remove($number)
}

现在$ Matching_numbers现在包含匹配的数字 和$ adlist仅包含AD中的数字 和$ oraclelist仅来自Oracle的数字

然后您可以遍历列表并显示值:

Write-Host "Matches:"
ForEach ($value in $Matching_numbers)
{
  $Message += $value + [Environment]::NewLine
}
Write-Host $Message

Write-Host "AD only:"
ForEach ($value in $adlist)
{
  $MessageAd += $value + [Environment]::NewLine
}
Write-Host $MessageAd

Write-Host "Oracle only:"
ForEach ($value in $oraclelist)
{
  $MessageOracle += $value + [Environment]::NewLine
}
Write-Host $MessageOracle 

或仅仅通过写作

$Matching_numbers

将列表输出到控制台

您可以将$ Message变量输出到文件中。

毫无疑问,有一种更好的方法可以做到这一点,但这对我来说对某种类型的文件很有用。