Poweshellは、中間コンパイラ的なインタプリタ型のスクリプト言語だと思います。
これは、スクリプトコードがテキストファイルですのでコードが丸見えです。
パスワードをスクリプト上に記述すれば、もろバレです。
かと言って、暗号化しても複合化のスクリプトを書いてみればすぐバレてしまいます。
パスワードを埋め込んでどこまでセキュアにできるか?という課題があります。
良い方法は、スクリプトを起動させるたびにパスワードを手入力するのが一番よいです。
しかし、何のためにスクリプトで自動化しているかわからなくなります。
なので気持ち程度セキュアにする方法を模索してみます
特殊な文字列(セキュアで読み書き出来ない文字列)へ変換するConvertTo-SecureString
特殊な文字列(セキュアで読み書き出来ない文字列)から変換するConvertFrom-SecureString
暗号化は、Windowsへのログインアカウント情報をキーにして行っているとのことで、暗号化されたパスワードファイルを別のアカウントに持って行っても復号化できないので使用することができません。
Windows データ保護 API(DPAPI)を使用していると書いてあります。
👉ConvertFrom-SecureString (Microsoft.PowerShell.Security) - PowerShell | Microsoft Learn
$SecurePassword = Read-Host "パスワードを入力" -AssecureString
$SecurePassword は、 Write-hostしても表示はされません
-AssecureString をを属性をつけて暗号化し+読み書き出来ない特殊な文字列に変換します
記述内に暗号化したい文字列が丸見えなのであまりこのような利用方法はしないと思いますが、コマンドレットを理解するうえで役に立ちます。
$SecurePassword = ConvertTo-SecureString -String '12345' -AsPlainText
ConvertTo-SecureString は、-String で指定する文字列は、暗号化された文字列である必要があります。
通常の文字列を、暗号化してから読み書き出来ないようにするには、-AsPlainText の属性をつけることで、文字列が、通常文字列であることを明示する必要がります。これにより。暗号化してから特殊文字列に変換されます。
先ほどの手入力したパスワードは、-AssecureString によって暗号化でされ特殊な文字列として保護されており表示も保存もできません。
これをファイルに保存するには、標準の文字列に変換し保存できるようにします。
注)標準文字列になるだけで、暗号化されたままですので表示や保存はできますが、パスワードそのままを表示や保存するわけではなく暗号化された数字文字の羅列です。
ConvertFrom-SecureString -SecureString $SecurePassword | Out-File 'Password.txt'
$SecurePassword = Get-Contents -Path 'Password.txt' | ConvertTo-SecureString
これを行うことで$SecurePasswordの中が表示することも保存することもできないようになります。
基本的には、復号して使用することは、メモリー上にも残ってしまい、セキュアな状態ではないため推奨されません。
$Password = ConvertFrom-SecureString -SecureString $SecurePassword -ASPlainText
~復号化した復号化された文字列はすぐにクリアする
$Password = $null