我找不到信息......
此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
我得到布尔结果,如真或假......
我很高兴听到你的建议如何消除空值或空条目
答案 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
,如上所示。