私は、PowerShellスクリプトにパラメータを渡すエレガントな方法を見つけようとしています。この場合、文字列にはエスケープする必要がある任意の数の特殊文字を含めることができます。たとえば、特殊文字を含む複雑なパスワードです。Powershell -encodedコマンドを使用してパラメータを渡す
私は-encodedcommandオプションを見ていましたが、これはエンコードされたバージョンのパラメータではなく、エンコードされたスクリプトブロックを渡すためだけのようです。例えば
、次のスクリプトを考えてみます。
param(
[Parameter()][Alias("un")][string]$Username,
[Parameter()][Alias("pw")][string]$Password
)
Write-Host "Username: $Username"
Write-Host "Password: $Password"
にstring 'を-un testuserを-pw testpw' は次のようにbase64エンコードです: LQB1AG4AIAB0AGUAcwB0AHUAcwBlAHIAIAAtAHAAdwAgAHQAZQBzAHQAcAB3AAの==
私は、スクリプトを呼び出してみました.ps1ファイルを読み込んで上記の文字列で-encodedcommandを渡してもエラーが発生しました 'パラメータ名に一致するパラメータが見つかりません' encodedcommand '
これはb直接powershell.exeを呼び出します。
はまた、次のことを試してみました: たpowershell.exe -encodedcommand LQB1AG4AIAB0AGUAcwB0AHUAcwBlAHIAIAAtAHAAdwAgAHQAZQBzAHQAcAB3AA == -file Base64ParamTest.ps1
これは、スクリプトを実行したが、パラメータは値がありませんでした。
これは私が期待していたとおりに動作していますが、希望通りには動作しません。実際に自分自身のパラメータを安全にエンコードされた文字列として渡す方法はありますか?
私の計画Bはここで、Base64は、パラメータ全体の文字列ではなく、パスワード値そのものをエンコードし、それをスクリプトでデコードします。十分に簡単ですが、私はそれを自動的に行う簡単な方法がないのだろうかと疑問に思っていた – Eric