如何在Powershell中选择具有特殊字符的键?

时间:2019-04-19 21:33:39

标签: json powershell

我有一组来自JSON文件的键/值对。

package org.bitguiders.ciam.acctmgt.cfg

import javax.ws.rs.ApplicationPath;

import org.bitguidres.api.exceptions.GenericExceptionMapper;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("acc/api/*")
public class ApplicationConfig extends ResourceConfig {
    public ApplicationConfig() {
        packages("org.cas.ciam.acctmgt");
        register(JacksonFeature.class);
        register(GenericExceptionMapper.class);
        register(new DependencyBinder());
    }
}

在Powershell中看起来像$ $p.dependencies @architect/architect : ^5.7.0 @architect/functions : ^3.0.4 assert : ^1.4.1 bcrypt : ^3.0.6 find-parent-dir : ^0.3.0 hashids : ^1.2.2 http-status-codes : ^1.3.2 lodash.get : ^4.4.2 mini-web-server : ^1.0.2 mini-webhook-server : ^1.0.4 mocha : ^5.2.0 opencorporates : ^3.0.0 stripe : ^6.23.1 uuid : ^3.3.2 whois-json : ^2.0.4

noteProperty

我想使用 TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() @architect/architect NoteProperty string @architect/architect=^5.7.0 @architect/functions NoteProperty string @architect/functions=^3.0.4 assert NoteProperty string assert=^1.4.1 bcrypt NoteProperty string bcrypt=^3.0.6 find-parent-dir NoteProperty string find-parent-dir=^0.3.0 hashids NoteProperty string hashids=^1.2.2 http-status-codes NoteProperty string http-status-codes=^1.3.2 lodash.get NoteProperty string lodash.get=^4.4.2 mini-web-server NoteProperty string mini-web-server=^1.0.2 mini-webhook-server NoteProperty string mini-webhook-server=^1.0.4 mocha NoteProperty string mocha=^5.2.0 opencorporates NoteProperty string opencorporates=^3.0.0 stripe NoteProperty string stripe=^6.23.1 uuid NoteProperty string uuid=^3.3.2 whois-json NoteProperty string whois-json=^2.0.4 键将项目更改为与@architect/functions不同的值(然后将数据保存回去)

下一部分似乎是从哈希表中选择正确的项目。我正在使用:

^3.0.4

但是,这不会返回任何结果。 如何用键$p.dependencies | where $_.key -eq "@architect/functions" 选择项目?要获得奖励积分,如何更改值!

修改

使用答案,如果有人觉得有用,这是我的最终脚本。

@architect/functions

2 个答案:

答案 0 :(得分:2)

要获取名称中包含特殊字符的属性,请引用它:

$p.dependencies.'@architect/functions'

答案 1 :(得分:2)

Tomalak's helpful answer解决了您的问题。

关于您尝试使用In [13]: eval("4*5+25-5.5/1") Out[13]: 39.5 where)检索感兴趣的属性:

  

Where-Object

有两个基本问题:

  • 抽象地讲,使用比较语句语法(即使用单个参数代替脚本块)需要您可以单独使用属性名称​​ $p.dependencies | where $_.key -eq "@architect/functions",而不是通过自动变量key$_

    • 实际上,$_.key-指代手边的管道输入对象-仅在脚本块()($_)中有意义。 p>

    • 也就是说,如果您的命令是正确的(不是,请参见下文),则必须使用:
      { ... }

  • 如您的输出所示,$p.dependencies | where key -eq '@architect/functions'包含一个$p.dependencies实例,而不是一个哈希表([pscustomobject]);除非您使用[hashtable]开关明确请求哈希表,否则ConvertFrom-Json返回[pscustomobject]实例。

    • 如果它是哈希表,PowerShell将通过整个管道 将其发送。
    • 要通过管道一个一个地发送哈希表的条目,您必须在其上调用-AsHashtable,这将允许您按其{{1 }}属性。