【PowerShell】CSVファイルの操作をする

PowerShell

【PowerShell】CSVファイルの操作をする

2018年7月10日

こんにちは!そーまんです。

前回は、テキストファイルの操作を PowerShell でやってみました。テキストファイルの操作では、該当のファイルがあるか確認したり、中身を参照したり、検索したり、テキストを上書き・追記したりしました。

皆さんご存知であると思いますが、一応 CSV の説明をここでしておきます。


CSV とは

CSV ファイルは表形式のプレーンテキストで、カンマで区切られた形式で保存されています。

拡張子は .csv になります。使われ方は様々ですが例えば以下の用途で使われています。

  • サーバーやアプリなど、システム内部で持っている情報を画面上で csv でエクスポート、またはインポート
  • サーバーやアプリなど、システム内部で持っている情報をスクリプトで csv でエクスポート、またはインポート
  • Active Directory のオブジェクトを csv でエクスポート、またはインポート

今回は、CSV ファイルの操作を PowerShell でやってみました。CSV ファイルの操作では、CSV ファイルをインポートしたり、処理の結果を CSV ファイルで出力したりする事ができます。


CSV ファイルのインポート

CSV ファイルのインポートは Import-Csv コマンドレットを使います。

Import-Csv コマンドレットは CSV ファイルのデータからテーブルを作ります。元データは以下になります。

元データ(かなり適当に書きましたw)


CSV ファイルにデータ追加

今度はスクリプトで csv ファイルを作ってみましょう。ネタは会社の従業員リストです。

  1. Add-Content コマンドレットでファイルを作り、-Value オプションで値を追記します。
  2. 配列で個々の社員番号から入社日までを $staff_data に代入します。
  3. 代入した $staff_data をパイプさせて、foreach 文で Add-Content を使って各オブジェクトを指定した csv ファイルに書き込みます。$_はオブジェクトになります。基本的には $staff_data はテーブル内では複数列のデータが含まれているのですが、パイプラインを使って一つ一つオブジェクトを $_ を使って取得して、csv ファイルに書き込んでいます。

上のスクリプトで作成された csv ファイル


CSV ファイルの出力

CSV 形式でファイルをエクスポートしたい時は Export-Csv コマンドレットを使います。

CSV ファイルに 2 バイト文字、例えば日本語が入っているような場合ですと、エクスポート時に文字化けしてしまうので、-Encoding Default のオプションは結構よく使います。

引き続き上のスクリプトを使い、カラムのデータをソートしてみます。例えば上の sample2.csv の従業員リストのカラムで入社日でソートしたい場合はこんな感じで書きます。Import-Csv, Export-Csv 両方で -Encoding Default を指定してあげないと、文字化けしてしまうので書いています。-NoTypeInformation オプションは CSV でファイルが作成されたときに、表の先頭に既定の文字列が自動的に入らないようにするオプションになります。

上のスクリプトで作成された csv ファイル(入社日でソートされました)


最後に

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

CSV ファイルにインポートやエクスポートする事はよく使うかもしれませんので、コマンドレットをここで覚えておきましょう。またオプションの -Encoding は結構忘れがちですので、文字化けしないように合わせて理解しておきましょう。

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

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴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
-,