cmdプロンプトでは、このように1行に2つのコマンドを実行することができます
ipconfig /release & ipconfig /renew
このコマンドをPowerShellで実行すると、こうなります
Ampersand not allowed. The `&` operator is reserved for future use
PowerShellには、cmdプロンプトで&
に相当するものを素早く生成するための演算子はありますか?
2つのコマンドを1行で実行する方法は何でもいいです。スクリプトが作れるのは知っていますが、もう少し突飛なものを探しています
367 David 2013-06-26
PowerShell でコマンドを連鎖させるにはセミコロンを使用します
ipconfig /release; ipconfig /renew
516 Squeezy 2013-06-26
前の回答で述べたように、コマンドをセミコロンでリンクしますが、MS-DOSスタイルのコマンドインタプリタの&
演算子での動作には重要な違いがあります
コマンドインタプリタでは、変数の置換は行の読み込み時に行われます。これにより、変数の入れ替えなど、いくつかのすっきりとした可能性が可能になります
set a=1
set b=2
set a=%b% & set b=%a%
echo %a%
echo %b%
結果として
2
1
私の知る限りでは、この動作をPowerShellで再現する方法はありません。それが良いことだと主張する人もいるかもしれません
実はPowerShellにはこれを行う方法があります
$b, $a = $a, $b
その結果、変数の値が一行で入れ替わることになります
35 Dave_J 2013-09-10
PowerShell 7 には Pipeline chain operators
があり、逐次的な一行コマンドに条件付きの要素を追加することができます
演算子は
&&
これは、最初のコマンドが成功した場合にのみ、2番目のコマンドを実行します||
これは、最初のコマンドが失敗した場合にのみ、2番目のコマンドを実行します
examples:
PS Z:\Powershell-Scripts> Write-Host "This will succeed" && Write-Host "So this will run too"
This will succeed
So this will run too
PS Z:\Powershell-Scripts> Write-Error "This is an error" && Write-Host "So this shouldn't run"
Write-Error "This is an error" && Write-Host "So this shouldn't run": This is an error
PS Z:\Powershell-Scripts> Write-Host "This will succeed" || Write-Host "This won't run"
This will succeed
PS Z:\Powershell-Scripts> Write-Error "This is an error" || Write-Host "That's why this runs"
Write-Error "This is an error" || Write-Host "That's why this runs": This is an error
That's why this runs
もちろん、x && y || z
などのようにさらに連鎖させることもできます
これは ipconfig
のような古い cmd ライクなコマンドでも動作します
PS Z:\Powershell-Scripts> ipconfig && Write-Error "abc" || ipconfig
Windows-IP-Konfiguration
Ethernet-Adapter Ethernet:
Verbindungsspezifisches DNS-Suffix: xxx
Verbindungslokale IPv6-Adresse . : xxx
IPv4-Adresse . . . . . . . . . . : xxx
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : xxx
ipconfig && Write-Error "abc" || ipconfig: abc
Windows-IP-Konfiguration
Ethernet-Adapter Ethernet:
Verbindungsspezifisches DNS-Suffix: xxx
Verbindungslokale IPv6-Adresse . : xxx
IPv4-Adresse . . . . . . . . . . : xxx
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : xxx
これらの演算子は、$? と $LASTEXITCODE 変数を使用して、パイプラインが失敗したかどうかを判断します。これにより、コマンドレットや関数だけでなく、ネイティブ コマンドでも使用することができます
6 SimonS 2020-03-16