2017-02-11 9 views
0

さまざまなモジュールやスクリプトから参照される一連のJSONファイルを作成しました。 JSONでは、スクリプト/モジュールが存在するPowerShellインスタンス(およびスコープ)に既に存在する変数を参照します。 ConvertFrom-Jsonで参照される変数がリテラルをインポートしたように見えるため、変数aren彼らがセッションに入ると、拡大しない。ConvertFrom-Jsonの返信で変数を展開する

下記のtest.ps1を見ると、私が何をしようとしているのか、私の目標は何か(私が願っている)がわかります。そうでない場合は、私に説明してください。時々私は私が何をしているかを伝えるのに最高ではありません!

test.ps1

# The following Invoke-WebRequest just pulls in the JSON in this Gist 
$JSON = Invoke-WebRequest -Uri 'https://gist.githubusercontent.com/mpearon/a8614d73793c582760a6e2b9668d4f62/raw/2000ded35b6c8f9dd790f36a3169810acd5e3bdf/test.json' | 
     ConvertFrom-Json 
$ConnectionParams = @{ 
    ComputerName = $JSON.Server.connectionParameters.ComputerName 
    ErrorAction = $JSON.Server.connectionParameters.ErrorAction 
    Credential = $JSON.Server.connectionParameters.Credential 
} 
Enter-PSSession @ConnectionParams 

test.json:あなたはこのように変数epxansionを強制することができ、単純な値については

{ 
    "Server" : { 
    "connectionType" : "PSSession", 
    "connectionSubType" : "ServerType", 
    "securityLevel" : "Level1", 
    "connectionParameters" : { 
     "ComputerName" : "ServerNameHere", 
     "ErrorAction" : "Stop", 
     "Credential" : "$Creds" 
    } 
    } 
} 
+1

質問の関連部分は外部サイトには載せないでください。特にGistには載せないでください。あなたの質問は、要点が消えるとすぐに無駄になります。 –

答えて

3

$response = Invoke-WebRequest -Uri ... | Select-Object -Expand Content 
$json = $ExecutionContext.InvokeCommand.ExpandString($response) | 
     ConvertFrom-Json 

しかし、通常は複雑では動作しないことPSCredentialオブジェクトのようなデータ型。それらは文字列表現として挿入されます。

あなたは正確にあなたがInvoke-Expressionを使用することができ、拡張する必要がどのオプションを知っている場合は、次のものより

$json = Invoke-WebRequest -Uri ... | 
     Select-Object -Expand Content | 
     ConvertFrom-Json 
$json.Server.connectionParameters.Credential = Invoke-Expression $json.Server.connectionParameters.Credential 

その他、私はPowerShellがビルトイン、あなたがやりたい何かを持っているとは思いません。さらに、複雑なデータ構造をネットワークからロードして、ローカル変数を(任意の)部分に埋め込むのが役に立ちます。

+0

Invoke-WebRequestは、このオーディエンスの利益のために、プロダクションでどのように処理するかではありません。 これは、ネットワークの場所に保存され、社内の複数のモジュール(データバックボーンの一種)として使用されます。 異なる接続タイプ(つまり、PSSessions to File/ShareサーバーとExchangeエンドポイント)は異なる資格情報を必要としますが、資格情報はJSONが参照される前にセッションで定義されるため、ローカル拡張が必要です。 そこにリストされている2番目のオプションは、私の目的のために動作します。 ありがとうございます! –