[解決済み] Powershellでパラメータを切り替える
2022-03-02 23:05:38
質問
いろいろと調べてみたのですが、なかなか思い通りに動作させる方法が見つかりません。
私はPS Parametersの初心者ですが、かなり簡単だと思うことがあります。スクリプトを実行して、スイッチがあるかどうかを検出できるようにしたいのです。例えば、以下のようなものです。
myscript.ps1 -Deploy
-または
myscript.ps1
私が遊んでいるコードです。
function start-script {
param (
[parameter()]
[switch]$Deploy
)
if ($Deploy.IsPresent) {
Write-Host "True"
}
else {
Write-Host "False"
}
}
start-script
実行すると、これはエラーを返しませんが、書き込みホストの結果も出力しません。基本的に何もしないのです。私は何を間違えているのでしょうか、そしてどうすれば正しい出力が得られるのでしょうか?
ありがとうございます。 M
EDIT: 私が体験していることのスクリーンショットを追加します。
.isPresent
解決方法は?
これは、関数呼び出し(スクリプトの最終行)の中で、関数に引数を与えていないためです。もし、ps1スクリプトに外部からの引数を渡したい場合は、ps1スクリプトの最後の行に
param(...)
ブロックをスクリプトの先頭に追加してください。私はあなたが既に持っているコードに従いますが、この場合、関数は全く必要ないと思います。
コードはこのように簡略化できます。
param (
[switch]$Deploy
)
if ($Deploy) {
Write-Host "True"
}
else {
Write-Host "False"
}
しかし、関数を使いたい場合。
param (
[switch]$Deploy
)
function Start-Script {
param (
[switch]$Deploy
)
if ($Deploy) {
Write-Host "True"
}
else {
Write-Host "False"
}
}
Start-Script @PSBoundParameters
- PowerShellから。
PS /> .\script.ps1
False
PS /> .\script.ps1 -Deploy
True
- CMDから。
D:\> powershell -File script.ps1
False
D:\> powershell -File script.ps1 -Deploy
True
編集
-
いくつかのコンテキスト。
[switch]$Deploy
は関数のスコープ内にしか存在しないので、そのためにparam(...)
ブロックをスクリプトの先頭に配置します。 -
を使ったスプラッター
$PSBoundParameters
は、複数の関数で動作させることができます。
例
param (
[switch]$Deploy,
[string]$Name
)
function Start-Script {
param (
[switch]$Deploy
)
"Deploy switch is: {0}" -f $Deploy.IsPresent
}
function SayHello {
param(
[string]$Name
)
"Hello $Name!"
}
# This is what @mclayton was referring to in his comment.
# If the Argument $Name is called:
if($PSBoundParameters.ContainsKey('Name'))
{
# Call the function
SayHello @PSBoundParameters
}
Start-Script @PSBoundParameters
- PowerShellから。
PS /> .\script.ps1 -Name Santiago -Deploy
Hello Santiago!
Deploy switch is: True
関連
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み] JavaScriptで複数ケースを扱うSwitch文
-
[解決済み] switch文の複数ケース
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Powershell: 引数 "xxx" を受け入れる位置パラメーターが見つからない。
-
[解決済み】PowerShellの関数で変数をインクリメントする
-
[解決済み] powershellでパラメータ'Path'がNULLのため引数を結合できないエラーの取得
-
[解決済み] ConvertTo-Csv 引用符なしの出力
-
[解決済み] PowerShellと-contains演算子
-
[解決済み] Powershellでパラメータを切り替える
-
[解決済み] PowerShellの文字列補間構文
-
[解決済み] Powershell send-mailmessage - 複数の受信者にメールを送信する
-
[解決済み] PowerShellでコマンド出力に改行を追加するにはどうすればよいですか?
-
[解決済み] PowerShellの画面を各コマンドの前に自動的にクリアする方法はありますか?