Powershell,安装软件列表从注册表导出Csv



一直在尝试将此输出到csv。它本身很好,但不知道怎么做。我猜是因为我用的是write-host它从来没有真正进入到管道中这给了我一个空管道输入错误。我试过其他几种方法,但都无济于事。这是"股票代码"我想管理导出为csv:

$InstalledSoftware = Get-ChildItem "HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall"
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:SoftwareMicrosoftWindowsCurrentVersionUninstall"
$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:SoftwareMicrosoftWindowsCurrentVersionUninstall"

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

您可能需要学习一些关于管道、类型转换、散列表和Export-csv的知识。我希望这是值得的。

最新更新