Flash 当注册表不可访问时,在远程计算机上查找Adobe组件

Flash 当注册表不可访问时,在远程计算机上查找Adobe组件,flash,powershell,winapi,adobe,product,Flash,Powershell,Winapi,Adobe,Product,我有一个脚本,用于检查已安装的Adobe组件。 它搜索注册表。它可以正常工作,直到您进入一台不允许远程注册表访问的计算机。 我尝试使用Win32\u产品命令。网上到处都有人说要避免这种情况,但我找不到其他解决办法 缺点是,除了速度慢之外,Adobe不在WMI列表中 这是注册表方法: $UninstallRegKeys=@( “软件\\Microsoft\\Windows\\CurrentVersion\\Uninstall”, “软件\\Wow6432Node\\Microsoft\\Windo

我有一个脚本,用于检查已安装的Adobe组件。 它搜索注册表。它可以正常工作,直到您进入一台不允许远程注册表访问的计算机。 我尝试使用
Win32\u产品
命令。网上到处都有人说要避免这种情况,但我找不到其他解决办法

缺点是,除了速度慢之外,Adobe不在WMI列表中

这是注册表方法:

$UninstallRegKeys=@(
“软件\\Microsoft\\Windows\\CurrentVersion\\Uninstall”,
“软件\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall”
)
if(测试连接-计算机名$srv-计数1-EA 0){
foreach($UninstallRegKey中的$UninstallRegKey){
试一试{
$HKLM=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$srv)
$UninstallRef=$HKLM.OpenSubKey($UninstallRegKey)
$Applications=$UninstallRef.GetSubKeyNames()
}抓住{
$output.appendtext(“未能读取注册表项。可能没有远程权限!`r`n”)
$regfail=1
持续
}
}
foreach($App in$Applications){
$AppRegistryKey=$UninstallRegKey+“\\”+$App
$AppDetails=$HKLM.OpenSubKey($AppRegistryKey)
$AppGUID=$App
$AppDisplayName=$($AppDetails.GetValue(“DisplayName”))
如果($AppDisplayName-拆分“”-包含“Adobe”){
$AppVersion=$($AppDetails.GetValue(“DisplayVersion”))
$output.appendtext(“名称:”+$AppDisplayName+“`r`n”)
$output.appendtext(“版本:“+$AppVersion+”`r`n”)
}
}
这是Win32_产品方法:

$appinfo=获取WmiObject Win32_产品|选择对象名称、版本
foreach($appi in$appinfo){
如果($Appi.name-拆分“”-包含“Adobe”){
$output.appendtext(“名称:”+$Appi.Name+“`r`n”)
$output.appendtext(“版本:“+$Appi.Version+”`r`n”)
}
}
关于如何查找Adobe,还有其他方法吗?
我还考虑过寻找Adobe文件夹,但因为每个版本都有不同的样式,这可能会很困难。

如果远程注册表服务没有运行,为什么不运行它并再试一次?
Get service-Name remoteregistry-ComputerName$computer | Set service-Status running
您甚至可以先检查它,然后重试取消它,这样您只需尝试访问注册表一次。我不允许对终端进行更改。它们是客户端的桌面。我还建议使用适当的清单软件,如LanSweeper或类似的软件。WMI将很慢……使用WMI无法避免这一事实。有一件事……
($Appi.name-split'-包含“Adobe”)
应该是
($Appi.name-match“\bAdobe\b”)
保存拆分我想您不想看到这一点,但下面是问题的答案:。您只看到在使用WMI类时使用windows installer的软件。还有关于注册表……启动服务是一项临时措施……如果必须启动服务,也可以停止服务。