web-dev-qa-db-ja.com

コマンドラインのPowerShellパラメータでアンパサンド、セミコロン、中括弧をエスケープする方法は?

Powershellスクリプトを使用して、データベースのパスワードなどを含む構成ファイルを生成しています。このスクリプトの通常の使用法は、パスワードを生成して使用することですが、しばらくの間、他の開発者のデータベースにアクセスする必要があるため、Powershellスクリプトにパスワードを渡す必要があります。

問題は、パスワードがアンパサンド、セミコロン、中括弧を含む意味不明なものであることです。これをPowerShellのコマンドライン呼び出しに渡すにはどうすればよいですか? ( この答え他の答え は役に立ちますが、セミコロンと中括弧は役に立ちません。)

これが私が試したものです:

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3

結果:エラーメッセージ:アンパサンド(&)文字は使用できません。 &演算子は将来の使用のために予約されています。アンパサンドを二重引用符( "&")で囲み、文字列の一部として渡します。

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

結果:$ passwordの書き込みホストを実行すると、セミコロンまでの文字列しか得られません。また、-otherparamには、コマンドラインに渡した値ではなく、デフォルト値があります。

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

結果:write-Host $ passwordは、引用の前の最初のバックティックまで印刷します。そして、はい、それはすべてがすべて間違って解析していることを示すように見えるバックティックを出力します。ああ、そしてスクリプトで呼び出された他の関数の1つが、今まで見たことのない例外をスローしました( "4"引数を指定して "AcquireToken"を呼び出す例外: "authentication_canceled:ユーザーが認証をキャンセルしました")。これは、パラメーター構文解析は、新しく魅力的な方法で完全に実現されました。以下は、write-Host $ passwordによって生成されるものです。

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

結果:write-Host $ passwordは、引用の前の最初のバックティックまで印刷します。そして、2番目のパラメーターはデフォルト状態です。 (つまり、前回と同じ結果です。)プラスの面では、前の例でスローされた例外が発生しませんでした。

では、どのようにWindowsコマンドラインから任意のASCII文字列をpowershell文字列パラメータに渡すか?または、少なくとも、セミコロン、アンパサンド、および中括弧?

19
PotatoEngineer

PowerShellスクリプトを使用してfirebaseを実行しています。私はこのようなトリプル二重引用符を使用することで問題を解決しました:firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage"""。 URLは$releaseMessage、アンパサンドはもう問題を引き起こしません

0
Noxxys