Сравните два CSV-файла и найдите несоответствия - PullRequest
2 голосов
/ 10 января 2012

Я новичок в мире powershell, у меня есть какой-то проект на powershell для согласования запасов.

Я не уверен, что делать дальше, я попробовал несколько основных шагов, и я могу экспортировать

пользователи / группа / членство в группе.

Ниже приведены требования:

  • Теперь, чего я достиг - благодаря Говне

запрос 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.csv и Oracle_users.csv

Я хочу сравнить оба файла и перенаправить разницу как

пользователей AD не существует в Oracle Пользователь Oracle не существует в AD

Пример данных

AD_users.csv

u388848993
K847447388
u994888484

Oracle_users.csv

k095848889
u388848993

Я могу запросить базу данных Oracle, запрос AD тоже подойдет, единственная проблема в том, что я не могу сравнить вывод.

1 Ответ

4 голосов
/ 10 января 2012

Я сделал это примерно так в написанном мной сценарии:

[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 в файл или около того ..

Без сомнения, есть более хороший способ сделать это, но у меня это сработало для файла определенного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...