Set-Content

新しいコンテンツを書き込むか、ファイル内の既存のコンテンツを置き換えます。

構文

Set-Content
   [-Path] <string[]>
   [-Value] <Object[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [-NoNewline]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <string>]
   [<CommonParameters>]
Set-Content
   [-Value] <Object[]>
   -LiteralPath <string[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [-NoNewline]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <string>]
   [<CommonParameters>]
Set-Content
   [-Path] <string[]>
   [-Value] <Object[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Content
   [-Value] <Object[]>
   -LiteralPath <string[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

説明

Set-Content は、新しいコンテンツを書き込むか、ファイル内のコンテンツを置き換える文字列処理コマンドレットです。 Set-Content は既存のコンテンツを置き換え、ファイルにコンテンツを追加する Add-Content コマンドレットとは異なります。 Set-Contentにコンテンツを送信するには、コマンド ラインで Value パラメーターを使用するか、パイプライン経由でコンテンツを送信します。

次の例でファイルまたはディレクトリを作成する必要がある場合は、「 New-Itemを参照してください。

例 1: ディレクトリ内の複数のファイルの内容を置き換える

次の使用例は、現在のディレクトリ内の複数のファイルの内容を置き換えます。

Get-ChildItem -Path .\Test*.txt

Test1.txt
Test2.txt
Test3.txt

Set-Content -Path .\Test*.txt -Value 'Hello, World'
Get-Content -Path .\Test*.txt

Hello, World
Hello, World
Hello, World

Get-ChildItem コマンドレットは、Path パラメーターを使用して、現在のディレクトリのTest*で始まる.txtファイルを一覧表示します。 Set-Content コマンドレットは、Path パラメーターを使用してTest*.txt ファイルを指定します。 Value パラメーターは、各ファイル内の既存のコンテンツを置き換えるテキスト文字列 Hello, World を提供します。 Get-Content コマンドレットは、Path パラメーターを使用してTest*.txt ファイルを指定し、PowerShell コンソールに各ファイルの内容を表示します。

例 2: 新しいファイルを作成してコンテンツを書き込む

次の使用例は、新しいファイルを作成し、現在の日時をファイルに書き込みます。

Set-Content -Path .\DateTime.txt -Value (Get-Date)
Get-Content -Path .\DateTime.txt

1/30/2019 09:55:08

Set-Content は、 Path パラメーターと Value パラメーターを使用して、現在のディレクトリに DateTime.txt という名前の新しいファイルを作成します。 Value パラメーターはGet-Dateを使用して現在の日付と時刻を取得します。 Set-ContentDateTime オブジェクトを文字列としてファイルに書き込みます。 Get-Content コマンドレットは、Path パラメーターを使用して、PowerShell コンソールにDateTime.txtの内容を表示します。

例 3: ファイル内のテキストを置き換える

このコマンドは、既存のファイル内の単語のすべてのインスタンスを置き換えます。

Get-Content -Path .\Notice.txt

Warning
Replace Warning with a new word.
The word Warning was replaced.

(Get-Content -Path .\Notice.txt) |
    ForEach-Object {$_ -Replace 'Warning', 'Caution'} |
        Set-Content -Path .\Notice.txt
Get-Content -Path .\Notice.txt

Caution
Replace Caution with a new word.
The word Caution was replaced.

Get-Content コマンドレットは、Path パラメーターを使用して、現在のディレクトリ内のNotice.txt ファイルを指定します。 Get-Content コマンドはかっこで囲まれ、パイプラインに送信される前にコマンドが終了します。

Notice.txt ファイルの内容は、パイプラインから ForEach-Object コマンドレットに送信されます。 ForEach-Object は自動変数 $_ を使用し、 Warning の各出現箇所を Caution に置き換えます。 オブジェクトは、パイプラインから Set-Content コマンドレットに送信されます。 Set-Content では、 Path パラメーターを使用して Notice.txt ファイルを指定し、更新されたコンテンツをファイルに書き込みます。

最後の Get-Content コマンドレットは、更新されたファイルの内容を PowerShell コンソールに表示します。

例 4: Set-Content でフィルターを使用する

Set-Content コマンドレットにフィルターを指定できます。 フィルターを使用して Path パラメーターを修飾する場合は、パスの内容を示す末尾のアスタリスク (*) を含める必要があります。

次のコマンドは、C:\Temp ディレクトリ内のすべての*.txt ファイルの内容を Value 空に設定します。

Set-Content -Path C:\Temp\* -Filter *.txt -Value "Empty"

パラメーター

-AsByteStream

これは、 FileSystem プロバイダーによって使用できる動的パラメーターです。 詳細については、「 about_FileSystem_Provider」を参照してください。

コンテンツをバイト ストリームとして書き込む必要があることを指定します。 このパラメーターは、PowerShell 6.0 で導入されました。

Encoding パラメーターで AsByteStream パラメーターを使用すると警告が発生します。 AsByteStream パラメーターはエンコードを無視し、出力はバイト ストリームとして書き込まれます。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

型:SwitchParameter
Aliases:cf
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Credential

Note

このパラメーターは、PowerShell でインストールされているプロバイダーではサポートされていません。 別のユーザーを偽装したり、このコマンドレットの実行時に資格情報を昇格したりするには、 Invoke-Command を使用します。

型:PSCredential
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Encoding

これは、 FileSystem プロバイダーによって使用できる動的パラメーターです。 詳細については、「 about_FileSystem_Provider」を参照してください。

ターゲット ファイルのエンコードの種類を指定します。 既定値は utf8NoBOM です。

エンコードは、FileSystem プロバイダーが Set-Contentに追加する動的パラメーターです。 このパラメーターはファイル システム ドライブでのみ機能します。

このパラメーターに使用できる値は次のとおりです。

  • ascii: ASCII (7 ビット) 文字セットのエンコードを使用します。
  • ansi: 現在のカルチャの ANSI コード ページのエンコードを使用します。 このオプションは PowerShell 7.4 で追加されました。
  • bigendianunicode: ビッグ エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • bigendianutf32: ビッグ エンディアンバイト順を使用して UTF-32 形式でエンコードします。
  • oem: MS-DOS およびコンソール プログラムの既定のエンコードを使用します。
  • unicode: リトル エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • utf7: UTF-7 形式でエンコードします。
  • utf8: UTF-8 形式でエンコードします。
  • utf8BOM: バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。
  • utf8NoBOM: バイト オーダー マーク (BOM) を使用せずに UTF-8 形式でエンコードします。
  • utf32: UTF-32 形式でエンコードします。

PowerShell 6.2 以降では、 Encoding パラメーターを使用すると、登録済みのコード ページの数値 ID ( -Encoding 1251 など) や登録済みコード ページの文字列名 ( -Encoding "windows-1251" など) も使用できます。 詳細については、 Encoding.CodePage の .NET ドキュメントを参照してください。

PowerShell 7.4 以降では、Encoding パラメーターのAnsi値を使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。

Note

UTF-7* を使用することは推奨されなくなりました。 PowerShell 7.1 の時点で、Encoding パラメーターにutf7を指定すると警告が書き込まれます。

型:Encoding
指定可能な値:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
配置:Named
規定値:utf8NoBOM
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Exclude

文字列配列として、このコマンドレットが操作で除外する項目を指定します。 このパラメーターの値は、 Path パラメーターを修飾します。 パス要素またはパターン ( *.txtなど) を入力します。 ワイルドカード文字を使用できます。 Exclude パラメーターは、コマンドに項目の内容 (ワイルドカード文字がC:\Windows ディレクトリの内容を指定するC:\Windows\*など) が含まれている場合にのみ有効です。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Filter

Path パラメーターを修飾するフィルターを指定します。 FileSystem プロバイダーは、フィルターの使用をサポートする唯一のインストール済み PowerShell プロバイダーです。 FileSystem フィルター言語の構文は、about_Wildcardsにあります。 フィルターは、取得後に PowerShell でオブジェクトをフィルター処理するのではなく、コマンドレットがオブジェクトを取得するときにプロバイダーによって適用されるため、他のパラメーターよりも効率的です。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Force

ファイルが読み取り専用の場合でも、コマンドレットでファイルの内容を設定するように強制します。 実装はプロバイダーごとに異なります。 詳細については、「 about_Providers」を参照してください。 Force パラメーターは、セキュリティ制限をオーバーライドしません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Include

文字列配列として、このコマンドレットが操作に含める項目を指定します。 このパラメーターの値は、 Path パラメーターを修飾します。 パス要素またはパターン ( "*.txt"など) を入力します。 ワイルドカード文字を使用できます。 Include パラメーターは、コマンドに項目の内容 (ワイルドカード文字がC:\Windows ディレクトリの内容を指定するC:\Windows\*など) が含まれている場合にのみ有効です。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-LiteralPath

1 つ以上の場所へのパスを指定します。 LiteralPath の値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

詳細については、「 about_Quoting_Rules」を参照してください。

型:String[]
Aliases:PSPath, LP
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-NoNewline

これは、 FileSystem プロバイダーによって使用できる動的パラメーターです。 詳細については、「 about_FileSystem_Provider」を参照してください。

入力オブジェクトの文字列形式が連結されて出力が形成されます。 出力文字列の間にスペースや改行は挿入されません。 最後の出力文字列の後に改行は追加されません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-PassThru

コンテンツを表すオブジェクトを返します。 既定では、このコマンドレットによる出力はありません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

コンテンツを受け取るアイテムのパスを指定します。 ワイルドカード文字を使用できます。

型:String[]
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:True

-Stream

これは、 FileSystem プロバイダーによって使用できる動的パラメーターです。 このパラメーターは Windows でのみ使用できます。 詳細については、「 about_FileSystem_Provider」を参照してください。

コンテンツの代替データ ストリームを指定します。 ストリームが存在しない場合は、このコマンドレットによって作成されます。 ワイルドカード文字はサポートされていません。

Stream は、 FileSystem プロバイダーが Set-Contentに追加する動的パラメーターです。 このパラメーターはファイル システム ドライブでのみ機能します。

Set-Content コマンドレットを使用して、Zone.Identifierなどの代替データ ストリームのコンテンツを作成または更新できます。 ただし、インターネットからダウンロードされたファイルをブロックするセキュリティ チェックを排除する方法として、これはお勧めしません。 ダウンロードしたファイルが安全であることを確認する場合は、 Unblock-File コマンドレットを使用します。

このパラメーターは PowerShell 3.0 で導入されました。 PowerShell 7.2 の時点で、 Set-Content は、ディレクトリとファイルからの代替データ ストリームの内容を設定できます。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Value

項目の新しい内容を指定します。

型:Object[]
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

Object

項目の新しい値を含むオブジェクトをこのコマンドレットにパイプできます。

出力

None

既定では、このコマンドレットは出力を返しません。

String

PassThru パラメーターを使用すると、このコマンドレットはコンテンツを表す文字列を返します。

メモ

  • Set-Content は文字列処理用に設計されています。 文字列以外のオブジェクトをパイプして Set-Contentすると、オブジェクトを書き込む前に文字列に変換されます。 オブジェクトをファイルに書き込むには、 Out-Fileを使用します。
  • Set-Content コマンドレットは、任意のプロバイダーによって公開されるデータを操作するように設計されています。 セッションで使用可能なプロバイダーを一覧表示するには、「 Get-PsProvider」と入力します。 詳細については、「 about_Providers」を参照してください。