如何使用powershell将计算机名称和应用程序信息导出到csv
我正在尝试创建一个简单的PS脚本,用于SolarWinds,它将把这个脚本推出并在一堆计算机上运行。基本上,我需要它来导出机器名,并告诉我安装在计算机上的特定软件版本。想想软件审计。例如,我有5台电脑。我想让这个脚本在所有5台机器上运行,并将数据附加到一个csv文件中,显示它们的机器名、应用程序名和应用程序版本,仅适用于名称中包含“Office”的应用程序如何使用powershell将计算机名称和应用程序信息导出到csv,powershell,csv,Powershell,Csv,我正在尝试创建一个简单的PS脚本,用于SolarWinds,它将把这个脚本推出并在一堆计算机上运行。基本上,我需要它来导出机器名,并告诉我安装在计算机上的特定软件版本。想想软件审计。例如,我有5台电脑。我想让这个脚本在所有5台机器上运行,并将数据附加到一个csv文件中,显示它们的机器名、应用程序名和应用程序版本,仅适用于名称中包含“Office”的应用程序 $Results = Get-ItemProperty HKLM:\Software\Microsoft\Windows\Curren
$Results =
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object $env:computername, displayName, DisplayVersion |
where-object {$_.DisplayName -match 'office'}
$Results | Export-CSV -Append -Path \\filepath\office.csv -NoTypeInformation
预计如果这在5台或更多计算机上运行,我将得到一个csv文件,当在excel中打开该文件时,将为我提供3列数据。第一列是该计算机的计算机名,下一列是应用程序名,第三列是应用程序版本。这些计算机都将附加到同一个csv文件中,因此最后我有一个包含该应用程序及其版本的所有计算机的列表
我可以让它在一台计算机上工作,但当我尝试在多台计算机上运行它时,它不会附加到同一个csv文件
问题是机器名只是变成了列名,而不是用数据填充机器名列。最好使用invoke命令来获取远程数据
$export = @()
$computers = Get-Content Machines.txt
foreach($computer in $computers){
$Results = @()
$Results = Invoke-Command -ComputerName $computer -ScriptBlock { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object $computer, displayName, DisplayVersion | where-object {$_.DisplayName -match 'office' } }
$Results += $export
}
$export | Export-CSV -Append -Path \filepath\office.csv -NoTypeInformation
根据我的评论:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object @{l='ComputerName';e={$env:computername}},DisplayName,DisplayVersion |
Where-Object {$_.DisplayName -match 'office'}
此处的收益率(短路):
如果您想直接进入Excel,
Install Module ImportExcel
修改您的
Select Object
以插入计算属性=>Select Object@{Label='ComputerName';Expression={$env:ComputerName}},DisplayName,DisplayVersion
这是正确的脚本吗?因为$env:computername不是您正在收集的对象的成员。@LotPings只对我有用。谢谢,我认为这不会完全起作用,因为我不是从文本文件中提取机器名,而是使用solarwinds在所有机器上独立运行它。这有意义吗?然而,我认为这已经接近我所需要的了。$Results+=$export
应该是相反的<代码>$export+=$Results。最好将整个foreach分配给$export,收集所有输出,不需要中间的$Results。
ComputerName DisplayName DisplayVersion
------------ ----------- --------------
MY-PC HP Officejet Pro 8500 28.0..
MY-PC LibreOffice 6.2.5.2 6.2...
MY-PC Office 16 Click-to-Run 16.0...
MY-PC Office 16 Click-to-Run 16.0...