Powershell 将安装的软件从多个远程系统导出到csv

Powershell 将安装的软件从多个远程系统导出到csv,powershell,Powershell,如果我需要从本地PC获取信息,我的脚本(在某种程度上)会执行它应该执行的操作。我将它连接到一个txt文件以获取计算机列表。脚本将读取列表并显示计算机列表的“处理:…”,但导出仅显示本地系统。即使我从txt文件中删除本地PC,导出到csv仍然只显示本地系统。它确实创建了正确的列并相应地填充。我只需要它来从远程系统中提取数据。由于脚本将由多人使用,因此变量允许txt文件和输出文件在他们的系统上 Function Export-InstalledSoftware { Process {

如果我需要从本地PC获取信息,我的脚本(在某种程度上)会执行它应该执行的操作。我将它连接到一个txt文件以获取计算机列表。脚本将读取列表并显示计算机列表的“处理:…”,但导出仅显示本地系统。即使我从txt文件中删除本地PC,导出到csv仍然只显示本地系统。它确实创建了正确的列并相应地填充。我只需要它来从远程系统中提取数据。由于脚本将由多人使用,因此变量允许txt文件和输出文件在他们的系统上

Function Export-InstalledSoftware {
    Process {
        if (Test-Connection -ComputerName $_ -count 1 -quiet)
            {
            echo "Processing: $env:COMPUTERNAME"    
                Get-ItemProperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* `
                    | Select-object @{n='ComputerName';e={$env:COMPUTERNAME}},@{n='DisplayName';e={$_.displayName}},@{n='Publisher';e={$_.Publisher}},@{n='DisplayVersion';e={$_.DisplayVersion}} `
                    | Sort displayName `
                    | Export-CSV C:\Users\$(get-content env:username)\Desktop\"SoftwareQuery_"$(get-date -f yyyy-MM-dd)".csv" -NoTypeInformation -Encoding ASCII
            }
        }
    }

Get-Content "C:\Users\$(get-content env:username)\Desktop\systems.txt" -readcount 1 | Export-InstalledSoftware

在本地计算机上运行的脚本,
HKLM:\SOFTWARE
是HKEY_local_machine,它总是运行脚本的本地计算机。如果您想查询远程系统,您需要一种远程处理和身份验证的工作方法—现在的WinRM,并且
调用命令
远程运行脚本,或者通过WMI执行一个经典的RPC远程处理调用,这取决于您的环境中的可用和配置。尽管如此,“我有代码,但它不工作,我希望它能以不同的方式工作”并不是一个真正的主题、具体、可回答的编程问题。。。但我需要大量远程机器的HKLM,这就是我这样编写脚本的原因。如果有其他方法或更好的方法,这不是我们都在这里的目的吗?帮助,教书,学习?我在这方面相对来说是新手,边走边学。无论如何,谢谢你的评论。这需要一些脚本技巧,但你可以尝试创建HKEYèU用户的PSDrive,找到用户的SID,然后查看HKU:\\软件并在那里打印所有内容的列表。这就像可以远程查询HKCU,但您必须了解用户SID。不过,它会给你提供通用的软件名称,而不是任何确定的名称。使用
Invoke命令
或远程WMI调用是更好的选择。我同意@tessellingheckler。另一种选择是使用远程管理工具(如SCCM或GPO)来实现这一点。