将文本列从2个文件排序为单个文件

时间:2018-01-22 13:10:41

标签: powershell columnsorting

我需要从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列中,结果文件也包含不应包含的空字符串

2 个答案:

答案 0 :(得分:1)

不要那样使用Format-TableFormat-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