PowerShell置換メソッドと演算子:構文、例

2021年6月8日 14361 ビュー PowerShellを使用してファイルといくつかのアプリのバージョン情報を取得する方法

パワーシェル 交換 文字、文字列、テキスト、または特殊文字を置き換えるために使用できます。 PowerShellには 交換 方法交換 オペレーター





このSゾーンでは、PowerShellの使用方法を説明しています 交換 方法交換 オペレーター さまざまな置換タスクを実行します。



ガイドには2つのセクションがあります。最初のセクションでは、 交換 方法 複数の例で。

次に、2番目のセクションでは、の使用方法を学習します。 交換 オペレーター 、複数の例もあります。



投稿トピックを閲覧する



PowerShellのReplaceメソッドを複数の例で使用する方法

PowerShellのReplaceメソッドを複数の例で使用する方法

冒頭で述べたように、このセクションでは、 置換方法 。このセクションは、の構文から始まります。 置換方法

PowerShell置換メソッドの構文

の構文 交換 方法 は…



('string to replace').  Replace  (char oldChar, char newChar)
('string to replace').  Replace  (string Replace(string oldValue, newValue)

構文は同じことをします。私が両方を持っている唯一の理由は、文字または文字列を置き換えることができることを説明することです。



最初の構文は、PowerShell置換メソッドを使用して文字を置換する方法を示しています。ただし、2番目の構文は、文字列を置き換える方法を示しています。

PowerShellオブジェクトのメソッドを一覧表示する方法

PowerShellにはReplaceメソッドと演算子があることはすでに説明しました。オブジェクトをにピッピングすることで、PowerShellオブジェクトで使用可能なすべてのメソッドを一覧表示できます。 Get-Member 指図。

たとえば、このオブジェクトで使用可能なメソッドを見つけるには、次のコマンドを実行します。

'this is test' | Get-Member 

このコマンドは、一連のメソッドを返します。私は強調しました 交換 方法 下のスクリーンショットで。

さらに、を実行する別の方法があります Get-Member 指図。オブジェクトをにピッピングする代わりに Get-Member コマンドの場合、のInputObjectパラメータでオブジェクトを指定できます。 Get-Member

ここに例があります…

キーボードマクロの作成方法
Get-Member -InputObject 'this is test'

結果には、オブジェクトで使用可能なメソッドの数もリストされます。 交換 方法

PowerShellのReplaceメソッドを複数の例で使用する方法

次のサブセクションに進む前に、最後にもう1つ、最後の2つのコマンドの結果の[説明]列を見ると、メソッドの構文があります。

これは、メソッドの使用方法を説明するので非常に便利です。

PowerShell置換メソッドを使用して文字列内の文字を置換する方法

構文のサブセクションで、文字または文字列を置き換えることができると述べました。簡単な例を挙げると、VictorのVを小文字のvに置き換えたいと思います。

これがコマンドです…

('Victor').Replace('V','v')

そして、これがPowerShellでの結果です…

PowerShell置換メソッドの値では、大文字と小文字が区別されます。値は正確な大文字小文字をチェックします。たとえば、Victorで小文字のvを置き換えて、Aに置き換えようとすると、コマンドは同じ結果を返します。

上記のメモで説明したコマンドは次のとおりです…

('Victor').Replace('v','A')

このコマンドをPowerShellで実行すると、文字列に小文字のvがないため、元のオブジェクトであるVictorが返されました。

PowerShellで 交換 オペレーター このガイドのセクションでは、置換方法とは異なり、 交換 オペレーター 大文字と小文字は区別されません。

PowerShell置換メソッドを使用してテキストファイル内の複数の文字列を置換する方法

このガイドの考えに続いて、テキストファイル内の複数の文字列を置き換えることもできます。

この例では、いくつかのサーバー名を含むテキストファイルがあります。これがテキストファイルのスクリーンショットです。

PowerShell置換メソッドを使用してテキストファイル内の複数の文字列を置換する方法

サーバー名ITGServer1をITGServer4に置き換えたい。さらに、ITGServer2をITGServer5に、ITGServer3をITGServer6に置き換えたいと思います。

これがタスクを実行するスクリプトです…

Get-Content E:
eportsITGServers.txt | ForEach-Object { #this command chains the Replace Method. #If Replace is run individually, the previous lines appear not to be replaced $_.Replace('ITGServer1','ITGServer4').Replace('ITGServer2','ITGServer5').Replace('ITGServer3','ITGServer6') }

スクリプトの最初の行は Get-Content テキストファイルの内容をPowerShellにインポートします。次に、結果をにパイプします ForEach-Object

最後に、 ForEach-Object ループ、PowerShellは、オブジェクトごとに作成されたテーマ変数$ _を使用します。 ForEach-Object 指定されたとおりにアイテムを交換します。

PowerShellの置換メソッドをチェーンしました。そうしないと、スクリプトによって望ましくない結果が生成されます。

Wi-Fiを使用しているのに、電話でインターネット接続がないと表示されるのはなぜですか

スクリプトを実行するには、スクリプトをPowerShellISEにコピーして実行します。

スクリプトの最後のバージョンでは、PowerShellは結果をコンソールに表示します。あなたはできる 出力を書き込む 既存のコマンドをにピッピングすることによって セットコンテンツ 指図。

更新されたスクリプトは次のとおりです。書き込みエラーを回避するために、以前のバージョンのスクリプトの出力を変数に保存しました。次に、変数をにパイプしました セットコンテンツ 指図。

$newfile = Get-Content E:
eportsITGServers.txt | ForEach-Object { #this command chains the Replace Method. #If Replace is run individually, the previous lines appear not to be replaced $_.Replace('ITGServer1','ITGServer4').Replace('ITGServer2','ITGServer5').Replace('ITGServer3','ITGServer6') } $newfile | Set-Content E:
eportsITGServers.txt -Force

これが新しいテキストファイルの出力です…

PowerShell置換メソッドを使用してテキストファイル内の複数の文字列を置換する方法

PowerShell置換メソッドを使用して複数の文字を置換する方法

テキストファイル内の複数の文字列を置き換える処理は、文字列内の複数の文字を置き換える処理と同じです。前のセクションの例から、Replaceメソッドをチェーンすることをお勧めします。

この例では、メソッドのMをTに置き換えます。さらに、dをDに置き換えます。

これがコマンドです…

(('Method').Replace('M','T')).Replace('d','D')

そして、PowerShellでの結果…

パイプラインでPowerShell置換メソッドを使用する方法

前のセクションでは、文字列、メソッドをパイプせずにこのコマンドを実行しました 交換 方法:

(('Method').Replace('M','T')).Replace('d','D')

同じコマンドを実行できますが、今回は文字列を置換メソッドにパイプします。ただし、パイプラインに渡すと、パイプライン自動変数$ _を使用して文字列を呼び出す必要があります。

コマンドは、以下に示すように変更する必要があります。

'Method' | Where-Object {$_.Replace('M','T').Replace('d','D')}

以下のスクリーンショットからわかるように、最後のコマンドは、最後のサブセクションのコマンドと同じ結果を生成します…

パイプラインでPowerShell置換メソッドを使用する方法

PowerShell置換メソッドを使用して、文字の後のすべての文字列を置換する方法

このサブセクションの例では、最後の円記号の後のすべてを、この文字列(c: programfiles tv version8 Uninstall.exe)のを空の文字列に置き換えたいと思います。

これらの2つのコマンドがその役割を果たします。

$string = 'c:programfiles	vversion8uninstall.exe' $string.Replace('uninstall.exe','')

最初のコマンドは、文字列を変数に保存します。次に、2番目のコマンドはPowerShellの置換メソッドを使用して、文字列の後のすべてを空のスペースに置き換えます。

事実上、以降はすべて削除されます。コマンドの結果は次のとおりです。

PowerShell置換メソッドを使用してテキストファイルの文字列を置換する方法

私はというテキストファイルを持っています Processfile1.txt 。テキストファイルには、AgentSvc_Newに置き換えたい値AgentSvcがあります。

PowerShell置換メソッドを使用してテキストファイルの文字列を置換する方法

以下のコマンドでタスクを完了します…

$file = 'E:
eportsProcessfile1.txt'  
$find = 'AgentSvc'
$replace = 'AgentSvc_New'
(Get-Content $file).replace($find, $replace) | Set-Content $file

最初のコマンドは、ファイルパスを変数に保存します。また、2番目のコマンドは、検索したい値を別の変数に保存します。

さらに、3行目は置換文字列を別の変数に保存します。最後に、最後のコマンドで、結果のReplaceメソッドを呼び出します。 Get-Content 指図。

次に、Replaceメソッド内で、$ find変数と$ replace変数に保存されている値を使用します。次に、出力をにパイプします セットコンテンツ これにより、テキストファイルが新しい値で更新されます。

コマンドを実行した後、テキストファイルの新しい値は次のようになります。

PowerShell置換メソッドを使用して二重引用符を一重引用符に置き換える方法

このサブセクションでは、の二重引用符を置き換えたいと思います 234″ 20.1.2021 一重引用符で。コマンドは次のとおりです…

$string = '234''20.1.2021'  
$string.Replace('''','''')

最初の行は文字列を保存し、 234″ 20.1.2021 変数で。次に、2行目で、PowerShellの置換メソッドを使用して、文字列内の二重引用符を一重引用符に置き換えました。

秘訣は、PowerShellの引用ルールの適用と使用にあります。 PowerShellは、一重引用符と二重引用符の両方を使用してリテラル文字列を指定します。

この例では、文字列内の二重引用符を一重引用符に置き換えます。ただし、PowerShellの置換メソッドで思い出す場合は、置換する値と新しい値を指定するための引用符も必要です。

したがって、Replaceコマンドで現在の値(二重引用符)を指定するには、二重引用符を一重引用符で囲みます– ‘‘。

さらに、新しい値(一重引用符)を指定するには、それらを二重引用符で囲みます–。

また、元の文字列に二重引用符が含まれているため、 234″ 20.1.2021 、文字列を変数に保存するには、文字列を一重引用符で囲む必要がありました。

コマンドに戻る…

$string = '234''20.1.2021'  
$string.Replace('''','''')

これがPowerShellでの結果です…

PowerShell置換メソッドを使用して二重引用符を一重引用符に置き換える方法

この例のように単純ですが、PowerShellの見積もりルールを理解していないと、PowerShellにこのタスクを完了させるのに苦労します。

PowerShell置換メソッドを使用して完全一致を置換する方法

このセクションでは、別のPowerShell置換メソッドの例を示します。今回は、文字列の完全一致を置き換える方法を説明します。

このセクションの例はこれからです stackoverflow.com 糸。質問を投稿したユーザーがこの文字列のお茶を置き換えたいので、私はチームのお茶をコーヒーに持ってきました。

これがその仕事をするコマンドです…

('I brought tea for my team').Replace('tea','coffee')

そして、これがPowerShellのコマンドの結果です…

ライブウェーブテレビアンテナレビュー

PowerShellの置換方法を使用して円記号を置換する方法()

このサブセクションでは、この文字列の単一の円記号()を置き換えます。 234 20.1.2021 ダブルバックスラッシュ付き、(\)。これがコマンドです…

('23420.1.2021').Replace('','\')

PowerShellでの結果…

PowerShellの置換方法を使用して円記号を置換する方法()

このガイドの「PowerShell置換演算子」セクションに示されているように、単一の円記号を置換演算子に置き換えることは、これほど簡単ではありません。

PowerShellで無効なファイル名文字を置き換える方法

Windowsオペレーティングシステムには、ファイルやフォルダに名前を付けるために使用できない文字がいくつかあります。これらの文字は、一般に無効なファイル名文字と呼ばれます。

いずれかの文字を使用してファイル名を作成しようとすると、エラーが発生します。

したがって、出力を使用してファイル名を作成するPowerShellスクリプトを作成しても、これらの出力に無効なファイル名文字が含まれている場合は、それらの文字を削除する必要があります。

このサブセクションで説明するスクリプトは、PowerShellの置換メソッドを使用しません。ただし、ほとんどのSysAdminsが直面する可能性のある固有の問題が修正されると思うので、これを含めることにしました。

次に、これからまもなく説明する例を取得しました Stackoverflow.com 質問。質問をしたユーザーは、文字列を使用してファイルを作成する前に、文字列から無効な文字を削除したいと考えています。

さらに、文字列にスペースが含まれている場合、ユーザーはファイル名にスペースを保持したいと考えています。

さまざまなユーザーが好むソリューションを調べました。最良の解決策を持つものはによって投稿されました ジョン・ロングミュア

Johnの例では、文字列「abc * def.txt」内の無効なファイル名文字をすべて削除したいと考えています。ただし、元の質問の作成者から要求されたように、彼は文字列内のスペースを保持したいと考えています。

キーボードマクロの設定方法

これがジョンの台本です…

$name = 'abc* def.txt' ([char[]]$name | where { [IO.Path]::GetinvalidFileNameChars() -notcontains $_ }) -join ''

最初のコマンドで、彼は文字列を変数に保存します。次に、2番目のコマンドの最初の部分(パイプラインの前)で、彼は $ na me変数を[char]データ型に変換します。

[char]データ型はUnicode16ビット文字です。

コマンドの2番目の部分で、Johnは変換された[char]データ型の出力をWhere-Objectコマンドにパイプします。 Where-Objectスクリプトブロック内で、彼は GetinvalidFileNameChars() の方法 パスクラス[IO.Path]

次に、PowerShellに含まれていない値のみを返すように指示します。 GetinvalidFileNameChars() 方法。

The GetinvalidFileNameChars() メソッドは、すべての無効なファイル名文字をリストします。

最後に、無効なファイル名文字が削除された後、彼はPowerShell結合を使用してすべての文字を文字列にします。

最終結果は…特別な(無効なファイル名文字)はなくなりましたが、文字列はスペースとともに返されます!

使いやすくするために、によって投稿された元のスクリプトに基づいています Stackoverflow.com 質問の作者、私はJohnのスクリプトをPowerShell関数に変換することにしました。

これがPowerShell関数のRemove-InvalidFileNameCharsです。

Function Remove-InvalidFileNameChars { param( [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [char[]]$Name ) ($name | Where-Object { [IO.Path]::GetinvalidFileNameChars() -notcontains $_ }) -join '' }

PowerShell置換演算子を複数の例で使用する方法

PowerShell置換演算子を複数の例で使用する方法

このガイドの最初のセクションでは、PowerShell置換メソッドのさまざまな例について説明しました。このセクションでは、PowerShell置換演算子に焦点を当てます。

このセクションは、PowerShell置換演算子の構文について説明することから始まります。

PowerShell置換演算子の構文

PowerShell置換演算子の構文は…

('string to replace') -  Replace  (char oldChar, char newChar)
('string to replace') -  Replace  (string Replace(string oldValue, newValue)

PowerShellメソッドと演算子の明確な違いの1つは、それらの使用方法です。メソッドでは、オブジェクトの横にピリオド(。)を配置し、その後にメソッドの名前と()括弧を配置します。

逆に、演算子の場合は、PowerShellオブジェクトの後にスペースを追加し、その後に–と演算子の場合は名前を追加します。

したがって、以下の例では、を使用する代わりに 。交換() 、使用します -交換

PowerShell置換メソッドを使用して文字列内の文字を演算子化する方法

文字列Victorの文字iをIに置き換えるには、次のコマンドを使用します…

ボブ解き放たれたコディとは何ですか
('Victor') -Replace('i','I')

PowerShellでの結果…

大文字と小文字を区別するPowerShell置換メソッドとは異なり、PowerShell置換演算子はそうではありません。したがって、以下のコマンドは、前のコマンドと同じ結果を生成します…

('Victor') -Replace('I','I')

今回は、の価値側に大文字のIを使用しました 交換 オペレーター。文字列に大文字のIがないことに注意してください、ビクター。

したがって、大文字と小文字を置き換える必要があるPowerShellスクリプトを作成している場合は、Replaceメソッドの代わりにReplace演算子を使用してください。

PowerShell置換メソッドを使用してテキストファイル内の複数の文字列を置換する方法

[置換方法]セクションで、このテキストファイルのサーバー名を置換した例を示しました。

PowerShell置換メソッドを使用してテキストファイル内の複数の文字列を置換する方法

サーバー名ITGServer1をITGServer4に置き換えたい。さらに、ITGServer2をITGServer5に、ITGServer3をITGServer6に置き換えたいと思います。

これは、ReplaceMethodの例で使用されているスクリプトのReplaceOperatorバージョンです…

Get-Content E:
eportsITGServers.txt | ForEach-Object { #this chains the Replace Operators (($_ -Replace('ITGServer1','ITGServer4')) -Replace('ITGServer2','ITGServer5')) -Replace('ITGServer3','ITGServer6') }
Replace Methodの例で行ったように、最後のスクリプトのReplaceOperator部分はチェーンされています。

PowerShell置換演算子を使用して、大文字と小文字を区別する文字列と文字を置換する方法

このガイドのさまざまな時点で、PowerShellの置換メソッドでは大文字と小文字が区別されることを示唆しました。ただし、PowerShell置換演算子はそうではありません。

このセクションでは、例を挙げて説明します。

たとえば、Replaceメソッドでは大文字と小文字が区別されるため、このコマンドはRを置き換えません。

('R').Replace('r','b') 

ただし、Replace Operatorはデフォルトでは大文字と小文字を区別しないため、このコマンドはRを置き換えます。

('R') -Replace('r','b')

PowerShell置換演算子を使用してバックスラッシュ()を置換する方法

このガイドの最初のセクションでは、このPowerShellコマンドを使用して、この文字列の単一の円記号()を置き換えました。 234 20.1.2021 、二重円記号付き、(\)…

('23420.1.2021').Replace('','\')

ご覧のとおり、Replaceメソッドでは問題なく単一の円記号を使用しました。

ただし、最後のコマンドをReplace Operatorバージョンに変えると、エラーメッセージが表示されます。コマンドのReplaceOperatorバージョンは次のとおりです。

'23420.1.2021' -Replace('','\')

PowerShellでコマンドを実行すると、エラーメッセージが表示されます…

このエラーの理由は、PowerShellではが正規表現パターンとして扱われるためです。この問題を解決するには、に2番目の円記号を追加する必要があります。

これにより、内の単一の円記号が二重の\のように表示されます。ただし、2番目の円記号は、を正規表現パターンとして扱わないようにPowerShellに指示しています。

したがって、コマンドは次のようになります。

'23420.1.2021' -Replace('\','\')

これで、コマンドは魅力のように機能します。

それだけです–包括的で刷新されたPowerShell置換ガイド!お役に立てば幸いです。

役に立ったと思ったら、親切に投票してください はい この投稿は以下の役立つ質問でした。

または、このページの最後にある[返信を残す]フォームを使用して、質問したり、コメントを残したり、フィードバックを提供したりすることもできます。

最後に、PowerShell tech Sゾーンの詳細については、WindowsPowerShellハウツーガイドページにアクセスしてください。また、ホームページからの作業が非常に役立つ場合があります。

参考文献と参考資料

  1. メソッドについて
  2. オペレーターについて
  3. about_Quoting_Rules
  4. ハウツー:PowerShellデータ型を定義する
  5. パスクラス
  6. 文字列からPowerShellサブ文字列を抽出する方法
  7. 他に説明されている場合のPowershell:構文と例