[解決済み] PowerShellでコマンドライン引数を処理する方法
質問
コマンドライン引数を処理する最善の方法は何ですか?
何がベストなのか、いくつかの答えがあるようですが、結果的に私はこのような単純なことをどう処理したらいいのか行き詰っています。
script.ps1 /n name /d domain
AND
script.ps1 /d domain /n name.
これをうまく処理するプラグインはないのでしょうか?私はここで車輪を再発明していることを知っています。
明らかに、私がすでに持っているものはきれいではないし、確かに "best" ではありませんが、それは動作します...そしてそれは醜いです。
for ( $i = 0; $i -lt $args.count; $i++ ) {
if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain
解決方法は?
あなたは車輪の再発明をしています。通常のPowerShellスクリプトは、パラメータが
-
のように
script.ps1 -server http://devserver
そして、それらを
param
セクションを作成します。
また、パラメータにデフォルト値を割り当てたり、利用できない場合はコンソールから読み込んだり、スクリプトの実行を停止したりすることができます。
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
スクリプトの内部では、単純に
write-output $server
すべてのパラメータはスクリプトスコープで使用可能な変数になるためです。
この例では
$server
を省略した場合、スクリプトは停止します。
-username
パラメータを使用すると、端末の入力を要求します。
-password
が省略された場合。
更新しました。 PowerShell スクリプトに "flag" (ブール値の真/偽のパラメータ) を渡したい場合もあります。たとえば、スクリプトに "force" を渡すと、force が使用されていないときにスクリプトがより慎重なモードで実行されるようにすることができます。
そのためのキーワードは
[switch]
パラメータの種類を指定します。
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
スクリプトの内部では、次のように作業します。
if ($force) {
//deletes a file or does something "bad"
}
さて、スクリプトを呼び出すときには、switch/flagパラメータを次のように設定します。
.\yourscript.ps1 -server "http://otherserver" -force
フラグが設定されていないことを明示的に示したい場合は、特別な構文があります。
.\yourscript.ps1 -server "http://otherserver" -force:$false
Microsoft の関連ドキュメントへのリンク (PowerShell 5.0 用。バージョン 3.0 と 4.0 もリンク先で利用可能)。
関連
-
powershellで仮想マシンを作成する
-
PowerShellでのmatchコマンドの使用方法について解説
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] bashシェルスクリプトの全引数を伝搬させる
-
[解決済み] コマンドライン引数の読み方・処理方法は?
-
[解決済み] Javaでコマンドライン引数をパースするには?
-
[解決済み] コマンドライン引数にアクセスする方法を教えてください。
-
[解決済み】rakeタスクにコマンドライン引数を渡す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン