我必须为我的学校编写一个代码,在安装软件后比较2个.txt文件。它应该不是显示在我安装的第一个.txt x软件上,而是在第二个它应该显示。我写了这个,但我无法比较它们,因为.txt文件中都缺少x软件。 我怎样才能让它发挥作用?
$array1 = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* |
sort -Property installdate -Descending |
Format-Table DisplayName, @{Name="InstallDate"; Expression={([DateTime]::ParseExact($_.InstallDate, 'yyyyMMdd', $null)).ToShortDateString()}}
$array2 = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* |
sort -Property installdate -Descending |
Format-Table DisplayName, @{Name="InstallDate"; Expression={([DateTime]::ParseExact($_.InstallDate, 'yyyyMMdd', $null)).ToShortDateString()}}
$array1 | Export-Clixml C:\Users\Qendrim\Desktop\lb02_test.txt
$counter = 0
Start-Sleep -Seconds 10
$array2 | Export-Clixml C:\Users\Qendrim\Desktop\lb02_test_dif.txt
#Compare-object -ReferenceObject (Import-Clixml C:\Users\Qendrim\Desktop\lb02_test.txt) -DifferenceObject ($array2)
Compare-Object -ReferenceObject $(Get-Content C:\Users\Qendrim\Desktop\lb02_test.txt) -DifferenceObject $(Get-Content C:\Users\Qendrim\Desktop\lb02_test_dif.txt)
答案 0 :(得分:0)
您的脚本适用于x32版本的x32或Windows上的x32或x64版本的Windows上的x64。
如果应用程序在x64版本的Windows上为x32,则该应用程序将在下面的密钥中列出。
尝试与新密钥进行比较,看看你的应用程序是否存在。
我还要将输出格式化为" out-file"而不是" export-Clixml"因为它更容易与所有额外的格式进行比较。文本文档比同一XML格式文件小21倍。
$array1 | export-Clixml C:\Users\Qendrim\Desktop\lb02_test.txt
$array1 | out-file C:\Users\Qendrim\Desktop\lb02_test.txt
答案 1 :(得分:0)
我认为你遇到的问题实际上非常简单。执行时:
$array2 = Get-ItemProperty
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* |
sort -Property installdate -Descending |
Format-Table DisplayName, @{Name="InstallDate"; Expression=
{([DateTime]::ParseExact($_.InstallDate, 'yyyyMMdd',
$null)).ToShortDateString()}}
然后将数据保存到该变量。在睡眠期后导出到文件后,您将导出先前保存的数据,而不是睡眠期后的数据。
修复很简单,假设您在睡眠期间安装/卸载软件。所有你需要将这些线移到" Start-Sleep 10"。
这与DonBennettJr建议使用" Out-File"而不是" Export-Clixml"应该让你走上正确的轨道。