消除空虚

时间:2017-12-09 14:20:07

标签: json powershell

我找不到信息......

此powershell脚本收集LocalMachine中的证书信息:

$cert_days = get-childitem cert:LocalMAchine -recurse  |
select  @{Name="{#CERTINFO}"; Expression={($_.FriendlyName)}} |
Sort "{#CERTINFO}"

write-host "{"
write-host " `"data`":`n"

convertto-json $cert_days 

write-host
write-host "}"

我无法排除Null或空白项目,例如" &#34 ;.

使用-ne $Null我得到布尔结果,如真或假......

我很高兴听到你的建议如何消除空值或空条目

2 个答案:

答案 0 :(得分:1)

要排除空条目,您可以添加过滤条件以删除这些条目,最好是在def generate_photo_2(x, y, start_angle, size): ''' this function generate a '2' parameters: just like last function ''' do.penup() do.goto(x, y) do.pensize(3) do.setheading(start_angle) do.pendown() do.circle(-size, 200) do.fd(2 * size) do.left(45) do.fd(0.6 * size) do.left(90) do.fd(2 * size) 来电之前。例如

Sort-Object

答案 1 :(得分:0)

Robert Westerlund's helpful answer显示了使用$null cmdlet过滤掉''Where-Object(空字符串)值的一种方法,该cmdlet强制脚本块的输出到一个布尔值,导致$null''评估为$False,从而导致它们被过滤掉。

这个答案显示了另一种方法,并讨论了问题的其他方面。

<强> TL;博士

@{ 
  data = @((Get-ChildItem -Recurse Cert:\LocalMachine).FriendlyName) -notlike '' |
           Sort-Object | Select-Object @{ n='{#CERTINFO}'; e={ $_ } }
} | ConvertTo-Json
  

使用-ne $Null我得到布尔结果,如真或假......

如果LHS是标量而不是数组 ,则只会获得布尔 - 在这种情况下一个数组,返回匹配的数组元素

确保LHS(或任何表达式或命令输出)是一个数组,请将其包含在@(...) array-subexpression运算符中(以下使用PSv3 +语法):

@((Get-ChildItem -Recurse Cert:\LocalMachine).FriendlyName) -notlike ''

请注意使用-notlike ''清除$null''-notlike强制LHS为字符串$null转换为''

相比之下,如果你想使用-ne $null,你也必须使用-ne '' 以便消除空字符串(尽管如此,特殊情况下,您可以使用 -ne '',因为ConvertTo-Json只会忽略其输入中的$null值。

直接在.FriendlyName的典型数组值输出上调用Get-ChildItem是一个名为成员枚举的PSv3 +功能:.FriendlyName属性访问应用于< em>数组的每个元素,结果作为新数组返回。

在构造具有{#CERTINFO}属性的包装器对象之前对值进行过滤和排序不仅简化了命令,而且效率更高。

进一步的想法:

  • Do not use Write-Host to output data Write-Host绕过PowerShell的(成功)输出流;相反,使用Write-Output,您很少需要明确调用它,因为它的使用是暗示

    • 而不是write-host "{",而是使用write-output "{"或 - 最好 - 只需"{"
  • PowerShell支持多行字符串(请参阅Get-Help about_Quoting_Rules),因此无需逐行输出结果:

    @"
    {
      "data":
       $(<your ConvertTo-Json pipeline>)
    }
    "@
    
  • 但是,鉴于您无论如何都要调用ConvertTo-Json提供data包装器作为 PowerShell object (最简单的形式为哈希表)ConvertTo-Json ,如上所示。