我需要从PC上获取本地安装的软件列表。
我使用以下代码:
+----+---------+-------+----------------------+-------------+
| Id | Name | SpId | ListOfParts | ProductCode |
+----+---------+-------+----------------------+-------------+
| 1 | HWN2007 | Y2271 | VC-192919, VC-888192 | OP00P0 |
+----+---------+-------+----------------------+-------------+
然后我需要一个按DisplayName列排序的已安装软件列表。 试图使用:
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table -AutoSize > app32.txt
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table -AutoSize > app64.txt
但实际上列表没有按字母顺序排列在DisplayName列中,结果文件也包含不应包含的空字符串
答案 0 :(得分:1)
不要那样使用Format-Table
。 Format-Table
用于向用户呈现信息,而不是向其他命令呈现信息。它将输出转换为字符串,而不是PowerShell可以操作的对象。
尝试:
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Export-Csv -Path app32.csv -NoTypeInformation
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Export-Csv -Path app64.csv -NoTypeInformation
Import-Csv app32.csv, app64.csv |
Where-Object { -not [System.String]::IsNullOrWhitespace($_.DisplayName) } |
Sort-Object -Property DisplayName |
Export-Csv -Path all_apps.csv -NoTypeInformation
或者,或者:
Get-ItemProperty -Path HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Where-Object { -not [System.String]::IsNullOrWhitespace($_.DisplayName) } |
Sort-Object -Property DisplayName |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Export-Csv -Path app64.csv -NoTypeInformation
答案 1 :(得分:0)
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | export-csv app32.csv -NoTypeInformation
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | export-csv app64.csv -NoTypeInformation
$softwarelist = import-csv -Path ".\app32.csv"
$softwarelist += import-csv -path ".\app64.csv"
$Softwarelist | Sort-Object -Property DisplayName
基本上我使用export-csv
而不是将其写入txt文件,这允许powershell使用import-csv
,当它带来它时,它识别不同的属性;当它从.txt中获取内容时,它只会读取一个很大的字符串。
使用+=
我们可以将这两个文件一起添加,然后只添加sort-object
,以便按照您的喜好显示它们。
编辑:我应该补充一点,你可以跳过将它们写成CSV,而只是将它们存储在变量中并使用它。类似的东西:
$softwarelist = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
$softwarelist += Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
$Softwarelist | Sort-Object -Property DisplayName