2017-02-20 4 views
2

ユーザー名を持つ2つのCSVファイルがあります。
両方のファイルに存在しないユーザーの名前だけをエクスポートします。2つのCSVを比較し、両方に存在しない名前のリストのみをエクスポートします

私が今持っているコード:

$file1 = import-csv -Path "C:\ps\output\adusers.csv" 
$file2 = import-csv -Path "C:\ps\output\users.csv" 
Compare-Object $file1 $file2 -property name | Export-Csv -NoTypeInformation -Path "C:\ps\result\result.csv" 
+0

私のエクスポートが正しくないように見えます。すべての答えがありがとう、ありがとう。 – Provo

答えて

2

使用Select-Object name比較・オブジェクトの出力から唯一の名前フィールドを抽出する:

Compare-Object $file1 $file2 -Property name | 
    select name | 
    sort -unique -Property name | 
    Export-Csv -NoTypeInformation -Path "C:\ps\result\result.csv" 

注:

  • sort -unique重複排除と種類リスト。 CSV場合
  • は、違いを取得するにはSideIndicatorを使用しHashSet
+1

+1。他のいくつかの答えは、** SideIndicator **に言及しています。これは、_both_入力オブジェクトからの不一致のエントリを望む場合には役立ちませんが、他のケースでは認識するのに便利です。 –

0

を使用し、巨大です。

$file1 = import-csv -path C:\Output\Test.csv 
$file2 = import-csv -path C:\Output\DomainUsers.csv 
Compare-Object $file1 $file2 -property name -IncludeEqual | where-object {($_.SideIndicator -eq "=>") -or ($_.SideIndicator -eq "<=") } | Export-csv C:\Output\Difference.csv –NoTypeInformation 

注:ソートあなたのケースでも-uniqueを使用することができます。

希望します。

+0

** - IncludeEqual **を使用し、 'Where-Object'コマンドレットを使用してそのようなケースを無視します(相互にキャンセルします)。実際には、これはここの解決法が実際には元の例とは全く異なるわけではないことを意味します。 –

+0

私はそれを試して、正しく動作しています。あなたが望むなら、同じ@CharlieJoynt –

1

file1のからの唯一の違いをCompare-Objectを使用するには、このような何かを試してみてください:

$file1=import-csv "C:\temp\test\adusers.csv" 
$file2=import-csv "C:\temp\test\users.csv" 

Compare-Object $file1 $file2 -Property "Name" | 
    Where SideIndicator -eq "<=" | 
    Select Name | 
    Export-Csv "C:\temp\test\result.csv" -NoType 

あなたが(両方のファイルから)すべての相違は、この部分を削除したい場合:

'Where SideIndicator -eq "<=" |' 
+0

のスクリーンショットを送ることができます。これはうまくいきます。おかげでEsperento57 – Provo

+0

説明なしで常にnoobダウン投票 – Esperento57

1

をあなたの場合using linq/NETを気にしないで、これは両方のリストにあるユーザーをリストします:

$file1 = import-csv -Path "C:\ps\output\adusers.csv" 
$file2 = import-csv -Path "C:\ps\output\users.csv" 
[linq.enumerable]::intersect([object[]]($file1.name), [object[]]($file2.name)) | 
    Export-Csv -NoTypeInformation -Path "C:\ps\result\result.csv" 

Linqには逆方向/逆方向のメソッドはありませんが、汎用コレクションのSymmetricExceptWithを使用することができます。

$file1 = import-csv -Path "C:\ps\output\adusers.csv" 
$file2 = import-csv -Path "C:\ps\output\users.csv" 
$res = [Collections.Generic.HashSet[String]]([string[]]($file1.name)) 
$res.SymmetricExceptWith([string[]]($file2.name)) 
$res | Export-Csv -NoTypeInformation -Path "C:\ps\result\result.csv" 

注:このコードは、以前のPowerShellのバージョンでは動作しないことがあり、以下の

コードは、一度に1つのリストまたは別ではなく、両方のいずれかに存在しているユーザーが一覧表示されます。

関連する問題