805

次のスニペットがあるとします。

$assoc = New-Object PSObject -Property @{
    Id = 42
    Name = "Slim Shady"
    Owner = "Eminem"
}

Write-Host $assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner

このスニペットが表示されることを期待しています:

42 - Slim Shady - Eminem

しかし、代わりに次のように表示されます。

42 + - + Slim Shady + - + Eminem

+これにより、演算子は文字列と変数を連結するのに適していないと思います。

PowerShell でこれにどのようにアプローチする必要がありますか?

4

22 に答える 22

873
Write-Host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"

Windows PowerShell 言語仕様バージョン 3.0、p34、サブ式の展開を参照してください。

于 2013-02-27T13:37:03.240 に答える
343

一重引用符と二重引用符には違いがあります。(私は PowerShell 4 を使用しています)。

これを行うことができます(ベンジャミンが言ったように):

$name = 'Slim Shady'
Write-Host 'My name is'$name
-> My name is Slim Shady

または、これを行うことができます:

$name = 'Slim Shady'
Write-Host "My name is $name"
-> My name is Slim Shady

一重引用符はリテラル用です。このように文字列を正確に出力してください。二重引用符は、前処理 (変数、特殊文字など) を行う場合に使用します。

そう:

$name = "Marshall Bruce Mathers III"
Write-Host "$name"
-> Marshall Bruce Mathers III

一方:

$name = "Marshall Bruce Mathers III"
Write-Host '$name'
-> $name

(ハウツー: エスケープ文字、区切り文字、引用符が参考になると思います)。

于 2015-09-08T10:25:22.393 に答える
215

使用することもできます-join

例えば

$var = -join("Hello", " ", "world");

$var に「Hello world」を割り当てます。

したがって、出力するには、1行で:

Write-Host (-join("Hello", " ", "world"))
于 2016-01-11T11:34:48.867 に答える
146

1 つの方法は次のとおりです。

Write-Host "$($assoc.Id)  -  $($assoc.Name)  -  $($assoc.Owner)"

もう1つは次のとおりです。

Write-Host  ("{0}  -  {1}  -  {2}" -f $assoc.Id,$assoc.Name,$assoc.Owner )

または単に(しかし、私はそれが好きではありません;)):

Write-Host $assoc.Id  "  -  "   $assoc.Name  "  -  "  $assoc.Owner
于 2013-02-27T13:37:09.873 に答える
89

印刷したいものを括弧で囲んでみてください:

Write-Host ($assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner)

あなたのコードは、多くのパラメータが に渡されていると解釈されていますWrite-Host。括弧で囲むと、値が連結され、結果の値が単一のパラメーターとして渡されます。

于 2013-02-27T13:37:39.453 に答える
40

別のオプションは次のとおりです。

$string = $assoc.ID
$string += " - "
$string += $assoc.Name
$string += " - "
$string += $assoc.Owner
Write-Host $string

「最良の」方法は、おそらく CB が提案したものです。

Write-Host "$($assoc.Id)  -  $($assoc.Name)  -  $($assoc.Owner)"
于 2013-02-27T13:49:30.357 に答える
30

式をかっこで囲んで、コマンドレットに対して別のパラメーターとして扱われないようにする必要があります。

Write-Host ($assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner)
于 2013-02-27T13:36:37.937 に答える
14

別の方法として、次の方法があります。

Write-Host (" {0}  -  {1}  -  {2}" -f $assoc.Id, $assoc.Name, $assoc.Owner)
于 2013-02-27T13:42:57.397 に答える
6

PowerShell ですべきこと / すべきでないことから: パート1 :

$id = $assoc.Id
$name = $assoc.Name
$owner = $assoc.owner
"$id - $name - $owner"
于 2013-02-28T21:08:21.823 に答える
6

DOS 時代と同じように文字列を連結します。これはロギングにとって大きな問題なので、ここに行きます:

$strDate = Get-Date
$strday = "$($strDate.Year)$($strDate.Month)$($strDate.Day)"

Write-Output "$($strDate.Year)$($strDate.Month)$($strDate.Day)"
Write-Output $strday
于 2016-09-16T22:38:10.727 に答える
0

他の場所で述べたように、join を使用できます。

コマンドを入力として使用している場合 (私のように)、次の構文を使用します。

-join($(Command1), "," , $(Command2))

これにより、コンマで区切られた 2 つの出力が生成されます。

関連するコメントについては、 https://stackoverflow.com/a/34720515/11012871を参照してください。

于 2020-09-11T15:53:19.773 に答える