PowerShell でコマンドを複数行に分割する

Marion Paul Kenneth Mendoza 2023年1月30日
  1. Windows PowerShell マルチラインコマンド
  2. 特定の演算子を使用してコードの長い行を分割する
PowerShell でコマンドを複数行に分割する

読み取り可能なコードは、機能の目的をユーザーに非常に簡単に伝えることができます。変数名とメソッド名には、コードを読みやすくするための適切な命名規則が必要です。コードの可読性に寄与する他の属性は、一貫したインデントとフォーマットスタイルです。Windows PowerShell の複数行コマンドは、読みやすくするために長いコマンドラインを複数のステートメントに分割するのに役立ちます。

Windows PowerShell では、バックティック文字を使用して複数行コマンドを簡単に作成し、長いコマンドまたは単一行コマンドの複数行ステートメントを分割できます。

バックティック文字は、一種のエスケープ文字として使用されます。改行文字をエスケープして、行を継続します。

この記事では、長いコマンドを複数行に分割するための Windows PowerShell 複数行コマンドの重要性について説明します。

Windows PowerShell マルチラインコマンド

長いコマンドを複数行に分割するには、バッククォート文字を使用して複数行に分割します。

たとえば、ローカルコンピューターの空きディスク容量情報を取得したいとします。残念ながら、この特定の情報を取得するためのスクリプトは拡張コマンドであるため、読み取りと管理が困難です。

サンプルコード:

Get-WmiObject -Class win32_logicaldisk | Format-Table DeviceId, MediaType, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}

この記事では構文が分割されているように見えるかもしれませんが、コマンドラインインターフェイスにコピーすると、上記の例は非常に長いワンライナースクリプトになります。

特定のコマンドの改行に Windows PowerShell のバックチェック文字を使用すると、長いコマンドを複数の行に簡単に分割できます。

サンプルコード:

Get-WmiObject -Class win32_logicaldisk `
| Format-Table DeviceId, `MediaType, @{n="Size";e={[Math]::Round($_.Size/1GB,2)}}, `
@{n="FreeSpace";e={[Math]::Round($_.FreeSpace/1GB,2)}}

上記の例では、長いコマンドを複数の行に分割します。空白を使用し、その後に分割する最後にバックティック文字を使用します。バックティックと改行の間に空白を含む文字があってはならないことに注意してください。

コード構造は、複数行コマンドを使用して Windows PowerShell で読みやすく、保守しやすいものです。ただし、バックティック文字は読みにくく、バグを招くため、通常はお勧めしません。したがって、コードの長い行を分割する別の方法があります。

特定の演算子を使用してコードの長い行を分割する

通常、その時点でコマンドを構文的に完了できない場合は、自動的に行が継続されます。

1つの例は、新しいパイプライン要素(|)を開始することです。パイプライン演算子の後、別のパイプライン要素が欠落しているためコマンドを完了できないため、パイプラインは問題なく機能します。したがって、インタプリタが行うことは、次のコマンドラインで次のパイプライン要素を探すことです。

サンプルコード:

Get-WmiObject -Class win32_logicaldisk | 
Format-Table DeviceId, MediaType, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}

カンマ()は、パイプライン演算子などのコンテキストでも機能します。

サンプルコード:

Get-WmiObject -Class win32_logicaldisk | 
Format-Table DeviceId, MediaType, 
@{n="Size"; e={[Math]::Round($_.Size/1GB,2)}},
@{n="FreeSpace"; e={[Math]::Round($_.FreeSpace/1GB,2)}}

また、スクリプトブロックを定義するときに中括弧({})を使用すると、行を直接継続できます。

サンプルコード:

Get-WmiObject -Class win32_logicaldisk | 
Format-Table DeviceId, MediaType, 
@{
    n="Size"; e={
        [Math]::Round($_.Size/1GB,2)
    }
},
@{
    n="FreeSpace";e={
        [Math]::Round($_.FreeSpace/1GB,2)
    }
}

上記の手法を使用すると、サンプルコードが読みやすくなり、バックティック文字を使用せずにこれを管理できることがわかります。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn