2012-01-10 3 views
2

Я новичок в мире powershell, у меня есть проект на PowerShell для согласования инвентаря.Сравните два файла csv и найдите расхождения

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

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

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

  • Что теперь я достиг - Благодаря 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.csv и Oracle_users.csv

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

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

Выборочные данные

AD_users.csv

u388848993 
K847447388 
u994888484 

Oracle_users.csv

k095848889 
u388848993 

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

+1

Давайте посмотрим ваши данные в формате CSV. Обновите свой вопрос с примерами обоих. Замените конфиденциальную информацию на текст примера. –

+0

Являются ли эти единственные столбцы в файле csv? Не должно ли быть имя столбца вверху? –

+0

Как указывает @ user978511, похоже, что вам не хватает заголовков 'dn, sAMAcountName, Groups' и связанных примеров данных данных. –

ответ

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 

будет выводить список утешать

Вы можете выводить переменные $ сообщений в файл или так ..

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

+0

Да, почему я не подумал об этом. Думаю, я до сих пор не понял, что Powershell обладает полномочиями .Net :) Я обновлю ответ – Sverker84

+0

Он отлично работает, теперь я работаю над перенаправлением вывода. – Naveen

+0

очевидно, что вы упомянули об этом :) – Sverker84

Смежные вопросы