首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ConvertFrom-Json响应中展开变量

在ConvertFrom-Json响应中展开变量
EN

Stack Overflow用户
提问于 2017-02-12 05:47:13
回答 1查看 1.3K关注 0票数 0

我已经构建了一系列JSON文件,这些文件将被各种模块和脚本引用。在JSON中,我引用了脚本/模块所在的PowerShell实例(和作用域)中已经存在的变量。问题是,ConvertFrom-Json中引用的变量似乎导入了一个文字,因此变量一旦进入会话就不会展开。

当你浏览下面的test.ps1时,你会发现我一直在尝试做什么,以及我的目标是什么(我希望如此)。如果没有,请让我解释。有时候我并不擅长传达我想要的东西!

test.ps1

代码语言:javascript
复制
# 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

代码语言:javascript
复制
{
  "Server" : {
    "connectionType" : "PSSession",
    "connectionSubType" : "ServerType",
    "securityLevel" : "Level1",
    "connectionParameters" : {
      "ComputerName" : "ServerNameHere",
      "ErrorAction" : "Stop",
      "Credential" : "$Creds"
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-12 07:29:38

对于简单的值,您可以像这样强制变量epxansion:

代码语言:javascript
复制
$response = Invoke-WebRequest -Uri ... | Select-Object -Expand Content
$json = $ExecutionContext.InvokeCommand.ExpandString($response) |
        ConvertFrom-Json

但是,这通常不适用于像PSCredential对象这样的复杂数据类型。它们将作为它们的字符串表示形式插入。

如果您确切知道需要扩展哪个选项,可以使用Invoke-Expression

代码语言:javascript
复制
$json = Invoke-WebRequest -Uri ... |
        Select-Object -Expand Content |
        ConvertFrom-Json
$json.Server.connectionParameters.Credential = Invoke-Expression $json.Server.connectionParameters.Credential

除此之外,我不认为PowerShell有什么内置的东西可以做你想要的。此外,我看不到从网络加载复杂数据结构然后填充(任意?)其中包含局部变量的部分会很有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42181610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档