私はWeb上のREST APIとやりとりするいくつかのPowerShellモジュールを作成しましたので、この問題に取り組まなければなりませんでした。
私が使用したがっているテクニックは、私のPSReddit PowerShell Moduleに見られるように、ユーザーのローカル資格証明ストアにオブジェクトを格納することです。
まず、パスワードを暗号化された状態でエクスポートする。これを行うには、ConvertToコマンドレットとConvertFromコマンドレットの両方を使用する必要があります。
なぜ両方のコマンドレットですか?
ConvertTo-SecureString
は平文を暗号化オブジェクトにしますが、エクスポートすることはできません。その後、ConvertFrom-SecureString
を使用して暗号化されたオブジェクトを暗号化されたテキストに戻し、エクスポートすることができます。
私は非常に安全なハムのパスワードから始めます。
$password = "ham"
$password | ConvertTo-SecureString -AsPlainText -Force |
ConvertFrom-SecureString | Export-CliXML $Mypath\Export.ps1xml
この時点で、暗号化されたディスク上のファイルがあります。誰かがマシンにログオンすると、それを解読することはできません。誰かがマシンからそれをコピーしても、それを解読することはできません。私だけ、ここだけ。
テキストをどのように復号化しますか?
今、我々は後半に使用するために戻って同じプレーンテキストを取得したいと仮定すると、我々はあなたがそうのようなパスワードをインポートすることができ、私たちのPowerShellプロファイルにこれを追加することができます。
$pass = Import-CliXML $Mypath\Export.ps1xml | ConvertTo-SecureString
Get-DecryptedValue -inputObj $pass -name password
$password
>"ham"
パスワードを含む変数$password
が作成されます。復号化はこの関数に依存しますので、あなたのプロフィールにあることを確認してください:Get-DecryptedValue
。
Function Get-DecryptedValue{
param($inputObj,$name)
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($inputObj)
$result = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
New-Variable -Scope Global -Name $name -Value $result -PassThru -Force
}
トークンはどのような種類のオブジェクトですか?文字列? Export-CLIXML'を使用してください。 – TessellatingHeckler
トークンはそれを記述するのが悪いと思うのですが、技術的にはWebRequestSessionオブジェクトです。なぜなら、WebSessionパラメータでInvoke-WebRequestコマンドレットを使って返されるからです。 – ju5tin