次の方法で共有


Join-String

パイプラインのオブジェクトを 1 つの文字列に結合します。

構文

Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]
Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-SingleQuote]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]
Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-DoubleQuote]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]
Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-FormatString <String>]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]

説明

Join-String コマンドレットは、パイプライン オブジェクトから 1 つの文字列にテキストを結合または結合します。

パラメーターが指定されていない場合、パイプライン オブジェクトは文字列に変換され、既定の区切り記号 $OFSで結合されます。

手記

$OFS 値を設定すると、変数が $nullにリセットされるまで、配列が文字列に変換されるときに配列を結合するために使用されます。 $OFS を使用すると、コード内の他の場所で意図しない効果が発生する可能性があるため、代わりに Separator パラメーターを使用することをお勧めします。

プロパティ名を指定すると、プロパティの値が文字列に変換され、文字列に結合されます。

プロパティ名の代わりに、スクリプト ブロックを使用できます。 スクリプト ブロックの結果は、結合して結果を形成する前に文字列に変換されます。 オブジェクトのプロパティのテキストまたは文字列に変換されたオブジェクトの結果を組み合わせることができます。

このコマンドレットは、PowerShell 6.2 で導入されました。

例 1: ディレクトリ名を結合する

次の使用例は、ディレクトリ名を結合し、出力を二重引用符で囲み、ディレクトリ名をコンマとスペース (, ) で区切ります。 出力は文字列オブジェクトです。

Get-ChildItem -Directory C:\ | Join-String -Property Name -DoubleQuote -Separator ', '

"PerfLogs", "Program Files", "Program Files (x86)", "Users", "Windows"

Get-ChildItem では、Directory パラメーターを使用して、C:\ ドライブのすべてのディレクトリ名を取得します。 オブジェクトはパイプラインに送信され、Join-Stringされます。 Property パラメーターは、ディレクトリ名を指定します。 DoubleQuote パラメーターは、ディレクトリ名を二重引用符で囲みます。 Separator パラメーターは、ディレクトリ名を区切るためにコンマとスペース (, ) を使用するように指定します。

オブジェクトは System.IO.DirectoryInfo され、オブジェクトを System.String変換

例 2: プロパティ部分文字列を使用してディレクトリ名を結合する

この例では、部分文字列メソッドを使用してディレクトリ名の最初の 4 文字を取得し、出力を一重引用符で囲み、ディレクトリ名をセミコロン (;) で区切ります。

Get-ChildItem -Directory C:\ | Join-String -Property {$_.Name.SubString(0,4)} -SingleQuote -Separator ';'

'Perf';'Prog';'Prog';'User';'Wind'

Get-ChildItem では、Directory パラメーターを使用して、C:\ ドライブのすべてのディレクトリ名を取得します。 オブジェクトはパイプラインに送信され、Join-Stringされます。

Property パラメーター スクリプト ブロックは、自動変数 ($_) を使用して、各オブジェクトの Name プロパティ部分文字列を指定します。 部分文字列は、各ディレクトリ名の最初の 4 文字を取得します。 部分文字列は、文字の開始位置と終了位置を指定します。 SingleQuote パラメーターは、ディレクトリ名を一重引用符で囲みます。 Separator パラメーターは、セミコロン (;) を使用してディレクトリ名を区切ります。

自動変数と部分文字列の詳細については、「部分文字列の about_Automatic_Variables」を参照してください。

例 3: 結合出力を別の行に表示する

次の使用例は、サービス名を各サービスと個別の行に結合し、タブでインデントします。

Get-Service -Name se* | Join-String -Property Name -Separator "`r`n`t" -OutputPrefix "Services:`n`t"

Services:
    seclogon
    SecurityHealthService
    SEMgrSvc
    SENS
    Sense
    SensorDataService
    SensorService
    SensrSvc
    SessionEnv

Get-Service では、Name パラメーターを使用して、se*で始まるサービスを指定します。 アスタリスク (*) は、任意の文字のワイルドカードです。

オブジェクトは、Property パラメーターを使用してサービス名を指定する Join-String に送信されます。 Separator パラメーターは、復帰 (`r)、改行 (`n)、tab (`t) を表す 3 つの特殊文字を指定します。 OutputPrefix は、出力の最初の行の前に新しい行とタブを含むラベル Services: を挿入します。

特殊文字の詳細については、about_Special_Charactersを参照してください。

例 4: オブジェクトからクラス定義を作成する

この例では、既存のオブジェクトをテンプレートとして使用して PowerShell クラス定義を生成します。

このコード サンプルでは、スプラッティングを使用して行の長さを減らし、読みやすさを向上させます。 詳細については、about_Splattingを参照してください。

$obj = [pscustomobject] @{Name = "Joe"; Age = 42}
$parms = @{
  Property = "Name"
  FormatString = '  ${0}'
  OutputPrefix = "class {`n"
  OutputSuffix = "`n}`n"
  Separator = "`n"
}
$obj.PSObject.Properties | Join-String @parms

class {
  $Name
  $Age
}

パラメーター

-DoubleQuote

各パイプライン オブジェクトの文字列値を二重引用符で囲みます。

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

-FormatString

各パイプライン オブジェクトを結合する前に書式設定する方法を指定する書式指定文字列を指定します。 現在のオブジェクトを表すには、{0} プレースホルダーを使用します。 書式設定された文字列に中かっこ ({}) を保持する必要がある場合は、中かっこ ({{}}) を 2 倍にすることでエスケープできます。

詳細については、String.Format メソッドと複合書式を参照してください。

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

-InputObject

結合するテキストを指定します。 テキストを含む変数を入力するか、文字列に結合するオブジェクトを取得するコマンドまたは式を入力します。

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

-OutputPrefix

出力文字列の前に挿入されるテキスト。 文字列には、復帰 (`r)、改行 (`n)、tab (`t) などの特殊文字を含めることができます。

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

-OutputSuffix

出力文字列に追加されるテキスト。 文字列には、復帰 (`r)、改行 (`n)、tab (`t) などの特殊文字を含めることができます。

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

-Property

テキストに変換するプロパティまたはプロパティ式の名前。

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

-Separator

各パイプライン オブジェクトのテキストの間に挿入されるテキストまたはコンマやセミコロンなどの文字。

既定では、パイプライン オブジェクトは区切り記号なしで結合されます。 出力フィールド区切り 基本設定変数 ($OFS) が設定されている場合、このパラメーターを指定しない限り、その値が使用されます。

手記

$OFS 値を設定すると、変数が $nullにリセットされるまで、配列が文字列に変換されるときに配列を結合するために使用されます。 $OFS を使用すると、コード内の他の場所で意図しない効果が発生する可能性があるため、代わりに Separator パラメーターを使用することをお勧めします。

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

-SingleQuote

各パイプライン オブジェクトの文字列値を一重引用符で囲みます。

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

-UseCulture

現在のカルチャのリスト区切り記号を項目区切り記号として使用します。 カルチャのリスト区切り記号を検索するには、次のコマンドを使用します: (Get-Culture).TextInfo.ListSeparator

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

入力

PSObject

出力

String