Powershell,注册表导出 Csv 中的已安装软件列表

Powershell, Installed Software List from Registry Export Csv

一直在尝试将其输出到 csv。本身工作正常,但无法弄清楚如何去做。我猜是因为我使用的是写主机,它实际上从未进入管道,这给了我一个空管道输入错误。我尝试过其他一些方法无济于事。这是我想设法导出到 csv 中的“股票代码”:

$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"

foreach($obj in $InstalledSoftware)
    {write-host $obj.GetValue('DisplayName') -NoNewline; 
     write-host " - " -NoNewline; 
     write-host $obj.GetValue('DisplayVersion')}

正如我所说,管道似乎仍然是空的,所以添加 | export-csv 不起作用。我什至不需要它在屏幕上写入输出,虽然这是一个很好的优点,所以现在我会尝试用 write-host 以外的东西重新格式化它。

您需要先创建一个包含特定程序信息的对象,然后将此信息添加到数组中。然后您可以将数组导出为 CSV。您也可以一次导出一个条目并将其附加到 csv。但是如果发现这种方法更干净:

$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
$allSoftware = [System.Collections.ArrayList]@()
foreach($obj in $InstalledSoftware) {
    $software = New-Object -TypeName PSObject
    $software | Add-Member -MemberType NoteProperty -Name DisplayName -Value $obj.GetValue("DisplayName")
    $software | Add-Member -MemberType NoteProperty -Name Version -Value $obj.GetValue("DisplayVersion")
    $null = $allSoftware.Add($software)
}

$allSoftware | Export-Csv -Path "SomePath"

我重新编写了您的代码以生成可以提供给 Export-csv 的内容。

以下代码至少会生成一个 CSV 文件。它确实会产生几条没有数据的记录。它还可能有其他错误。但至少它会让您了解如何操作对象。

$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"


$installedSoftware | %{
    [pscustomobject]@{
        'DisplayName'     = $_.GetValue('DisplayName')
        'DisplayVersion'  = $_.GetValue('DisplayVersion')
        }} |Export-csv myfile.csv 

您可能需要了解一些有关管道、类型转换、哈希表和 Export-csv 的知识。我希望这是值得的。