当 get-itemproperty return null 时调用命令不 returning 任何值
Invoke-command not returning any value when get-itemproperty return null
我正在尝试使用 Invoke-Command
的内置并行处理功能,以便我可以快速扫描数百台计算机以查找 Office 365 安装(在 SCCM 报告中查找差异)。但是,当 Get-ItemProperty
找不到注册表项时,我不确定如何捕获机器没有 O365 的事实。
例如;
<some list of machines>.txt contains
computer1
computer2
computer3
$Computers = Get-Content .\<some list of machines>.txt
Invoke-Command -ComputerName $Computer -ScriptBlock {(Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\O365ProPlusRetail*)} -ErrorAction SilentlyContinue -ErrorVariable Problem | select pscomputername, DisplayName, DisplayVersion
... 运行速度非常快,并列出每台带有 O365 和版本的机器。那太棒了。但是缺少的是每台没有安装 O365 的机器。 IE。如果上面列表中的 "computer2" 没有 O365,则输出显示;
PSComputerName DisplayName DisplayVersion
-------------- ----------- --------------
computer1 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
computer3 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
关于如何保留并行处理并获得类似于以下的输出的任何想法?
PSComputerName DisplayName DisplayVersion
-------------- ----------- --------------
computer1 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
computer2
computer3 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
将您的脚本块修改为return一个虚拟对象,当信息不可用时发出信号:
Invoke-Command -ComputerName $Computer -ScriptBlock {
$result = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\O365ProPlusRetail*
if (-not $result) { [pscustomobject] @{} } else { $result }
} -ErrorAction SilentlyContinue -ErrorVariable Problem |
Select-Object pscomputername, DisplayName, DisplayVersion
[pscustomobject] @{}
创建一个没有属性的自定义对象,远程处理基础结构会在本地反序列化时自动向其添加 .PSComputerName
属性 (以及其他); Select-Object
然后将隐式添加空的 .DisplayName
和 .DisplayVersion
属性。
我正在尝试使用 Invoke-Command
的内置并行处理功能,以便我可以快速扫描数百台计算机以查找 Office 365 安装(在 SCCM 报告中查找差异)。但是,当 Get-ItemProperty
找不到注册表项时,我不确定如何捕获机器没有 O365 的事实。
例如;
<some list of machines>.txt contains
computer1
computer2
computer3
$Computers = Get-Content .\<some list of machines>.txt
Invoke-Command -ComputerName $Computer -ScriptBlock {(Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\O365ProPlusRetail*)} -ErrorAction SilentlyContinue -ErrorVariable Problem | select pscomputername, DisplayName, DisplayVersion
... 运行速度非常快,并列出每台带有 O365 和版本的机器。那太棒了。但是缺少的是每台没有安装 O365 的机器。 IE。如果上面列表中的 "computer2" 没有 O365,则输出显示;
PSComputerName DisplayName DisplayVersion
-------------- ----------- --------------
computer1 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
computer3 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
关于如何保留并行处理并获得类似于以下的输出的任何想法?
PSComputerName DisplayName DisplayVersion
-------------- ----------- --------------
computer1 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
computer2
computer3 Microsoft Office 365 ProPlus - en-us 16.0.9226.2114
将您的脚本块修改为return一个虚拟对象,当信息不可用时发出信号:
Invoke-Command -ComputerName $Computer -ScriptBlock {
$result = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\O365ProPlusRetail*
if (-not $result) { [pscustomobject] @{} } else { $result }
} -ErrorAction SilentlyContinue -ErrorVariable Problem |
Select-Object pscomputername, DisplayName, DisplayVersion
[pscustomobject] @{}
创建一个没有属性的自定义对象,远程处理基础结构会在本地反序列化时自动向其添加 .PSComputerName
属性 (以及其他); Select-Object
然后将隐式添加空的 .DisplayName
和 .DisplayVersion
属性。