PowerShell

【PowerShell】ファイルを比較する方法

2019年6月9日


Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

こんにちは!SE ブログの相馬です。

 

 

 

今回は、PowerShell を使ってテキストファイルの中身を比較してみました。

 

 

普段は皆さんは作業される時にデータの比較などされているかと思います。実際に作業で使うデータに誤りがある事を避ける為ですが、WinMerge などのツールを使って手動でされていますよね。

 

 

実は、PowerShell ではファイルの比較をする事ができます。つまり、スクリプト内でファイルの比較に問題が無ければコマンドを実行したりする事ができるわけです。これは便利ですよね。

 

 

 

検証内容

 

 

実際の利用場面を想定して Active Directory のグループを使って、以下の事を想定し検証してみました。

 

 

背景としては、定期的に AD のグループにユーザーを大量に追加します。元データは毎回今までの追加分も含めて全量送られてきます。差分の抽出をする事が面倒なので以下の 2 つの方法を考えてみました。

 

  1. AD のグループに格納されているメンバと元データを比較させて、差分だけ AD のグループに追加する。
  2. AD のグループに格納されているメンバを一旦全て削除し、元データにあるメンバを AD のグループに追加する。

 

 

 

スクリプト

 

 

処理の大まかな流れとしては以下になります。

 

  1. AD のグループは AllUsers がある事を前提としています。
  2. AD のグループに読み込ませる為に、事前にテキストを準備してあります。→ AllUsers1.txt
  3. AD のグループに読み込ませたらテキストにエクスポートしています。→ AllUsers2.txt
  4. AD のグループに正しくメンバが追加されたか、テキストを比較します。

 

 

 

ステップ毎に処理の順序は以下になります。

 

  1. 事前に準備したテキストを変数に格納
  2. AD のグループから全てのメンバを削除
  3. 準備したテキストを AD のグループにインポート
  4. ADのグループからメンバをテキスト(AllUsers2.txt) にエクスポート
  5. 用意したテキストファイルを読み込んでヘッダにある User を削除
  6. 5. で読み込んだテキストファイルを保存
  7. テキストファイルを変数に格納
  8. Compare-Object でファイルを比較
  9. 比較結果、データが同じであれば返り値に OK を返し、そうでなければ NG を返す

 

 

ではスクリプトを書いてゆきます。

 

 

 

 

差分のみ追加する場合は、以下のスクリプトでできました。

 

 

 

 

まとめ

 

 

以上となります。いかがでしょうか。

 

 

送られてくる元のデータによって処理の内容が異なるかと思います。追加分のデータだけ送られてくるのであればこの方法は使えませんので、差分のみ追加するスクリプトを書くことになりますので環境によって書くスクリプトが異なるわけです。

 

 

この記事を書いているにあたりまだまだ PowerShell というか、処理の書き方についてもっと修行が必要だなぁと思いました。とはいえ良い経験になりました。

 

 

それでは最後までお読みいただきありがとうございました!

 

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PowerShell
-,


Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637

Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637