PowerShellコマンドラインを複数の行に分割することは可能ですか?
Visual Basicでは、アンダースコア(_
)を使用してコマンドを次の行に続けることができます。
sh
コマンドを使用してスクリプトを送信する場合は、バックスラッシュを使用できるようにbashの規則が適用されます。その場合、スクリプトにはUNIXスタイルの末尾も必要です。
PowerShellコマンドラインを複数の行に分割することは可能ですか?
Visual Basicでは、アンダースコア(_
)を使用してコマンドを次の行に続けることができます。
sh
コマンドを使用してスクリプトを送信する場合は、バックスラッシュを使用できるようにbashの規則が適用されます。その場合、スクリプトにはUNIXスタイルの末尾も必要です。
回答:
スペースに続いてアクサングラーブ(バックティック)を使用できます。
Get-ChildItem -Recurse `
-Filter *.jpg `
| Select LastWriteTime
ただし、これは上記のような場合にのみ必要です。通常、コマンドがその時点で構文的に完了できない場合、自動的に行が継続されます。これには、新しいパイプライン要素の開始が含まれます。
Get-ChildItem |
Select Name,Length
|
別のパイプライン要素が欠落しているためコマンドを完了できないため、問題なく動作します。また、中括弧または他の種類の括弧を開くと、行を直接継続できます。
$x=1..5
$x[
0,3
] | % {
"Number: $_"
}
|
コンマと同様に、一部のコンテキストでも機能します。
1,
2
JavaScriptののと同様に、けれども、心に留めておいてください自動セミコロン挿入、改行はそれがポイントで発生するため、同様に壊れているいくつかのものがありますされて有効なステートメントが先行は:
return
5
動作しないでしょう。
最後に、(すべての種類の)文字列も1行を超えて拡張できます。
'Foo
bar'
次に、文字列内に改行が含まれます。
|
、およびなどの行継続文字としても機能することを忘れないでください{
。
私はちょうどそこにあってはならないことが分かった任意のバックティックと改行の間の文字。空白文字でもコマンドは機能しません。
ほとんどのC言語のような言語では、コードを最も読みやすくするために中括弧を配置することを意図的にしています。
PowerShellのパーサーは、ステートメントが完全に完了していないことを認識し、次の行を調べます。たとえば、オプションのスクリプトブロックパラメーターを取るコマンドレットを想像してください。
Get-Foo {............}
スクリプトブロックが非常に長い場合は、次のように記述します。
Get-Foo { ............... ............... ............... }
しかし、これは機能しません。パーサーには2つのステートメントが表示されます。1 Get-Foo
つ目はスクリプトブロックで、2つ目はスクリプトブロックです。代わりに、私は書きます:
Get-Foo { ............... ............... ............... }
行継続文字( `)を使用することもできますが、コードが読みにくくなり、バグが発生します。
この場合、左中括弧が前の行にある必要があるため、どこでもそのパターンに従います。
if(条件){ ..... }
なお、
if
パーサはスクリプトブロックの次の行になりますので、文は、言語の文法でのスクリプトブロックを必要とするが、一貫性のために、私は同じ行にオープンブレースを保ちます。
同様に、長いパイプラインの場合は、パイプ文字(|
)の後で中断します。
$ project.Items | ?{$ _。Key -eq "ProjectFile"} | %{$ _。Value} | %{$ _。EvaluatedInclude} | %{ ......... }
if
し、foreach
かつtry
作業、その後?彼らは次の行でスクリプトブロックを許可します...これはそれが可能であることを意味します
クリストバリトの答えを拡張するには:
コマンドラインで話していると思います-スクリプト内にある場合、改行はコマンド区切り文字として機能します。
コマンドラインでは、セミコロン「;」を使用します。
例えば:
コマンドラインでPowerShellスクリプトに署名します。改行はありません。
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
PowerShellおよびPowerShell ISEでは、(標準のバックティックの代わりに)各行の末尾にShift+ を使用Enterして複数行を編集することもでき`
ます。
SHIFT-ENTER
。トリックを知らない場合は、編集が大変です。
PSReadLine
モジュールまたは同等のものを使用する場合にのみ当てはまると思います。標準のWindowsコンソール入力関数でEnter
、Shift+Enter
機能的には同等です。
PSReadline
モジュールはコンソールホストでのみ機能します(ISEでは機能しません)。2)を使用する場合にのみShift+Enter
、コンソールホストで機能しPSReadline
ます。3)Shift+Enter
常にISEで機能してきました。4)なしPSReadline
でコンソールホストを使用する場合、Shift+Enter
は機能的にを押すのと同じEnter
です。
文字列を複数の行に分割する場合は、「+」を使用できます。例えば:
$header = "Make," +
"ComputerName," +
"Model," +
"Windows Version"
次のようになります。
$header = "Make,ComputerName,Model,Windows Version"
;
を使用してコマンドを区切ります\\
を置き換えます\
。"'
安全なアドレスを渡すために使用し、「 'PATH'」のようなコマンドを切り替えます。このps1コマンドは、ロケールpfx証明書をインストールします。
powershell -Command "$pfxPassword = ConvertTo-SecureString -String "12345678" -Force -AsPlainText ; Import-PfxCertificate -FilePath "'C:\\Program Files\\VpnManagement\\resources\\assets\\cert\\localhost.pfx'" Cert:\\LocalMachine\\My -Password $pfxPassword ; Import-PfxCertificate -FilePath "'C:\\Program Files\\VpnManagement\\resources\\assets\\cert\\localhost.pfx'" Cert:\\LocalMachine\\Root -Password $pfxPassword"
パイプ、角かっこ、かっこ、演算子、ドット、さらにコンマを使用して、PowerShellで行を続ける方法はたくさんあります。これについてのブログはこちらです:https : //get-powershellblog.blogspot.com/2017/07/bye-bye-backtick-natural-line.html
foreachやifなどのステートメントの直後にも続行できます。
$scriptBlock = [Scriptblock]::Create(@'
echo 'before'
ipconfig /all
echo 'after'
'@)
Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock