あなたは車輪の再発明をしています。-通常の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。
更新:「フラグ」(ブール値のtrue / falseパラメーター)をPowerShellスクリプトに渡すこともできます。たとえば、スクリプトは「フォース」を受け入れる場合があります。フォースが使用されていない場合、スクリプトはより注意深いモードで実行されます。
そのためのキーワードは[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"
}
ここで、スクリプトを呼び出すときに、次のようにスイッチ/フラグパラメータを設定します。
.\yourscript.ps1 -server "http://otherserver" -force
フラグが設定されていないことを明示的に示したい場合は、そのための特別な構文があります
.\yourscript.ps1 -server "http://otherserver" -force:$false
関連するMicrosoftドキュメントへのリンク(PowerShell 5.0の場合。バージョン3.0および4.0もリンクから入手できます):