PowerShell Wiki


Add-Content

Modified: 2008/10/14 22:18 by hiro - Categorized as: コマンドレット
コマンドレット名

Add-Content

エイリアス

ac

説明

Add-Contentコマンドレットを使用すると、指定した項目やファイルに内容を追加することができます。内容を指定するには、コマンドに内容を入力するか、内容が入力されているオブジェクトを指定します。指定した項目やファイルが存在しない場合は、新規で作成され、指定した値が追記されます。

書式

Add-Content [-path] <string[]>または[-literalPath] <string[]> [-value] <Object[]> [-include <string[]>] [-exclude <string[]>] [-filter <string>] [-passThru] [-force] [-credential <PSCredential>] [-whatIf] [-confirm] [<CommonParameters>]

パラメータ
-path <string[]>
  
内容を追加する先のパスを指定します。パスにはワイルドカードを指定することができます。また、カンマで区切ることで複数のファイルを指定することができます。
エスケープ文字を含むパスを指定することはできません。エスケープ文字を含むパスを指定したい場合は-literalPathパラメータを使用します。
(PowerShellでは`(アクサングラーブ文字)がエスケープ文字として扱われます。)

–––––––––– -Path パラメータの使用例1 ––––––––––

PS > Add-Content -Path "test.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する test.txt というファイルに"ABC"という文字列を追記します。
ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -Path パラメータの使用例2 ––––––––––

PS > Add-Content -Path "test1.txt","test2.txt" -Value "ABC"

このコマンドを実行すると、test1.txt と test2.txtの2つのファイルに文字列"ABC"を追記します。
ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -Path パラメータの使用例3 ––––––––––

PS > Add-Content -Path "*.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリにある拡張子が*.txtのファイルに"ABC"という文字列を追記します。

–––––––––– -Path パラメータのNG例1 ––––––––––

PS > Add-Content -Path "tes`t.txt" -Value "ABC"

このコマンドレットはパスにエスケープ文字`tが含まれているため「パスに無効な文字が含まれています。」のエラーが発生します。
エスケープ文字が含まれているパスを指定したい場合には-Pathパラメータの代わりに-literalPathパラメータを使用します。

–––––––––– -Path パラメータのNG例2 ––––––––––

PS > Add-Content -Path "tes[t.txt" -Value "ABC"

このコマンドレットはパスに[が含まれているため「指定されたワイルドカード パターンは無効です」のエラーが発生します。-Pathパラメータでは"["をワイルドカードととして認識します。この例で使用されている文字"["は正規表現で使用される文字であり"]"と対で使用しなければなりません。このようなファイル名を使用したい場合は-Pathパラメータの代わりに-literalPathパラメータを使用します。



-literalPath <string[]>
内容を追加する先のパスを指定します。ただし-pathパラメータと異なり、ワイルドカードを指定することができません。パスにワイルドーカード文字を含めてもワイルドカードとして認識されないためエラーが発生します。パスにエスケープ文字が含まれている場合は単一引用符で囲む必要があります。(PowerShellでは`(アクサングラーブ文字)がエスケープ文字として扱われます。)

注意)ワイルドカードは指定できない

PS > Add-Content -literalPath "Test*.txt" -Value "abc"

はエラーになります。-pathパラメータはワイルドカードを使用して複数ファイルへの書き込みが可能ですが-literalPathはできません。ただしカンマ区切りによる複数ファイルの指定は可能です。

–––––––––– -literalPath パラメータの使用例1 ––––––––––

PS > Add-Content -literalPath "test.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する test.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -literalPath パラメータの使用例2 ––––––––––

PS > Add-Content -literalPath "test1.txt","test2.txt" -Value "ABC"

このコマンドを実行すると、test1.txt と test2.txtの2つのファイルに文字列"ABC"を追記します。ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -literalPath パラメータの使用例3 ––––––––––

PS > Add-Content -literalPath 'tes`t.txt' -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する tes`t.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合には新規で作成されます。
この例のように、パスにエスケープ文字が含まれている場合は単一引用符(')で括って指定します。

–––––––––– -literalPath パラメータの使用例4 ––––––––––

PS > Add-Content -literalPath "tes[]t.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する tes[]t.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合には新規で作成されます。
この例のようにパスにワイルドカードパターンが含まれていても文字として取り扱います。

–––––––––– -literalPath パラメータのNG例1 ––––––––––

PS > Add-Content -literalPath "Test*.txt" -Value "abc"

このコマンドレットは、パスにワイルドカード(*)が含まれているためにエラーとなります。これは*をワイルドカードではなく文字として認識し、ファイル名として取り扱おうとしたことが原因となります。

-value <Object[]>
指定したファイルに追記する値を指定します。
追記できる値は、文字列、コマンドレットが返す値などを指定します。

–––––––––– -value パラメータの使用例1 ––––––––––

PS > Add-Content -Path "Test.txt" -Value "テストファイルです"

このコマンドレットを実行すると、既存のTest.txtファイルに「テストファイルです」という文字列を追記します。

–––––––––– -value パラメータの使用例2 ––––––––––

PS > $a = "テストファイルです"
PS > Add-Content -Path "Test.txt" -Value $a

このコマンドレットを実行すると変数 $a に代入した文字列を Test.txt へ追記します。

–––––––––– -value パラメータの使用例3 ––––––––––

PS > Add-Content -Path "Date.txt" -Value (Get-Date)

このコマンドレットを実行すると Get-Dateコマンドレットが返す値を Date.txt に追記します。
このようにコマンドレットが返す値を追記することが可能ですが、複数の値を一度に返すようなコマンドレットを指定した場合には期待通りの値を取得できないので注意が必要です。

–––––––––– -value パラメータの使用例4 ––––––––––

PS > Add-Content -Path "Test.txt" -Value (Get-Content "Sample.txt")

このコマンドレットを実行すると、Sample.txt の内容を Test.txt に追記します。
-value パラメータに直接パスを指定しても、パスを文字列として認識してしまうためこのような処理が必要となります。

–––––––––– -value パラメータのNG例1 ––––––––––

PS > Add-Content -Path "ServiceList.txt" -Value (Get-Service)

このコマンドレットは Get-Service のコマンドレットの結果を ServiceList.txtに追記しようとしていますが期待通りの結果にはなりません。("System.ServiceProcess.ServiceController"という文字列がサービスの数だけ書き込まれます)
これは、Get-Service が複数のオブジェクトを返すためです。

PS > Get-Service | %{Add-Content -Path "ServiceList.txt" -Value $_.ServiceName}

などの工夫が必要です。

-include <string[]>
-includeパラメータは、-pathパラメータで指定した項目の中から、対象を絞り込みます。
"*.txt"などパス要素やパターンを指定します。

–––––––––– -include パラメータの使用例1 ––––––––––

PS > Add-Content -Path "*.txt" -Value "ABC" -Include "test*.txt"

このコマンドレットは、"ABC"という値を、拡張子が"*.txt"のファイルへ追記します。
ただし、-includeパラメータで"test*.txt"としているため、拡張子が"*.txt"のファイルの中でも、特にファイル名が"test*.txt"のものだけを対象とします。

-exclude <string[]>
-excludeパラメータは、-pathパラメータで指定した項目の中から、項目を除外します。
"*.txt"などパス要素やパターンを指定します。

–––––––––– -exclude パラメータの使用例1 ––––––––––

PS > Add-Content -Path "*.txt" -Value "ABC" -Exclude "test*.txt"

このコマンドレットは、"ABC"という値を、拡張子が"*.txt"のファイルへ追記します。
ただし、-excludeパラメータで"test*.txt"としているため、拡張子が"*.txt"のファイルの中でも、特にファイル名が"test*.txt"を除外したものが対象となります。

-filter <string>

PS > Add-Content -Path "*.txt" -Value "ABC" -filter "test*.txt"

このコマンドレットは-includeパラメータ同様、-filterパラメータによって対象となるファイルを"test*.txt"に限定します。
-filterパラメータは、ほかのパラメータよりも効率がよいとされています。これは-includeパラメータや-excludeパラメータは、オブジェクト取得後にフィルタをするのですが、-filterパラメータは取得する時点でフィルタをかけるためです。

-passThru

Add-Content コマンドレットによって作成された値(-valueパラメータに渡した値)をパイプラインを介して渡せるようにします。

通常、Add-Content コマンドレットはパイプラインを介して値を渡しません。よって

PS > Add-Content -path "Test.txt" -Value "ABC" | Foreach-Object {$_}

上記のコマンドレットを実行しても、パイプラインにオブジェクトは渡されないため、何も出力せずに終了します。

–––––––––– -passThru パラメータの使用例1 ––––––––––

PS > Add-Content -path "Test.txt" -Value "ABC" -passThru | Foreach-Object {$_}

パイプラインにオブジェクトを渡したい場合には、上記のように-passThruパラメータを使用します。
このパラメータはスイッチパラメータのため値を指定する必要はありません。

–––––––––– -passThru パラメータの使用例2 ––––––––––

PS > Add-Content -path "*.txt" -Value "ABC" -passThru | Foreach-Object {$_}

このコマンドレットでは -pathパラメータで複数のテキストアイル(*.txt)を指定しているため、パイプラインには対象となったファイルの数だけ"ABC"という文字が渡されることになります。つまりカレントディレクトリに3つのテキストファイルが存在した場合には、パイプラインを介して3回"ABC"が送られます。

-force

-force パラメータ参照

-credential <PSCredential>

-credential パラメータ参照

-whatIf

コマンドレット共通パラメータ 参照

-confirm

コマンドレット共通パラメータ 参照

<CommonParameters>

コマンドレット共通パラメータ 参照

関連項目
Clear-Content コマンドレット
Get-Content コマンドレット
Set-Content コマンドレット


ScrewTurn Wiki version 2.0.33. Some of the icons created by FamFamFam.