2016-07-13 11 views
1

私は現在、REST APIとやりとりするPowerShellのプロジェクトを持っています。新しいpowershellセッションを開いた後の最初のステップは、自分自身を認証してWebSessionオブジェクトを作成し、 。セッション間でPowershellオブジェクトを保存する

このトークンオブジェクトをすべてのPowershellセッションに格納する最善の方法を知りたいのですが、今すぐ自分自身を認証して閉じることができます。& powershellを再オープンすると、どちらかというと不便です。理論的には一度認証してからpowershellを開くと、すでに保存されているwebsessionオブジェクトを使用できるようになります。現時点で私はこのウェブセッションオブジェクトを保存しています$MyInvocation.MyCommand.Module.PrivateData.Session

ありがとうございます。

+0

トークンはどのような種類のオブジェクトですか?文字列? Export-CLIXML'を使用してください。 – TessellatingHeckler

+0

トークンはそれを記述するのが悪いと思うのですが、技術的にはWebRequestSessionオブジェクトです。なぜなら、WebSessionパラメータでInvoke-WebRequestコマンドレットを使って返されるからです。 – ju5tin

答えて

1

私は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 

} 
+0

素晴らしいですね!ありがとう。 – ju5tin

+0

こんにちは@ ju5tin、私はちょうど大きな編集を終えました。コードを更新して最新の編集を試してください。 – FoxDeploy

+0

Gotcha。再度、感謝します! – ju5tin

関連する問題