如何将指定Powershell命令的执行结果批量插入Excel单元格
PowerShell命令结果导出到Excel解决方案
方案一:导出CSV文件(新手首选,无需额外依赖)
这个方案操作最简单,利用PowerShell原生的结构化对象导出功能,生成的CSV文件可以直接用Excel打开,格式自动对齐。
注意:不要使用findstr、format-list这类会把对象转成纯文本的命令,直接用原生cmdlet获取结构化数据即可,避免导出后格式混乱。
完整导出脚本
# 1. 导出域信息 Get-ComputerInfo | select CsDomain | Export-Csv -Path "域信息.csv" -Encoding UTF8 -NoTypeInformation # 2. 导出本地管理员组成员 Get-LocalGroupMember -Group Administrators | Export-Csv -Path "管理员组成员.csv" -Encoding UTF8 -NoTypeInformation # 3. 导出已安装软件列表 # 提示:Win32_Product会触发MSI安装包修复校验,速度慢且有概率修改软件配置,推荐用下方注册表查询命令替代 Get-CimInstance -Class Win32_Product | Export-Csv -Path "已安装软件列表.csv" -Encoding UTF8 -NoTypeInformation # 4. 导出时区信息 Get-TimeZone | Export-Csv -Path "时区信息.csv" -Encoding UTF8 -NoTypeInformation # 5. 导出系统区域设置 Get-Culture | Select-Object * | Export-Csv -Path "区域设置.csv" -Encoding UTF8 -NoTypeInformation # 6. 导出防火墙配置 Get-NetFirewallProfile | select Name, Enabled | Export-Csv -Path "防火墙配置.csv" -Encoding UTF8 -NoTypeInformation # 7. 导出逻辑磁盘信息 Get-CimInstance -Class Win32_LogicalDisk | Export-Csv -Path "磁盘信息.csv" -Encoding UTF8 -NoTypeInformation # 8. 导出网卡缓冲区配置 $nicBufferConfig = @() Get-NetAdapter | ForEach-Object { $recv = Get-NetAdapterAdvancedProperty -Name $_.Name -DisplayName "Receive Buffer Size" -ErrorAction SilentlyContinue $send = Get-NetAdapterAdvancedProperty -Name $_.Name -DisplayName "Send Buffer Size" -ErrorAction SilentlyContinue $nicBufferConfig += [PSCustomObject]@{ 网卡名称 = $_.Name 接收缓冲区大小 = $recv ? $recv.DisplayValue : "未配置" 发送缓冲区大小 = $send ? $send.DisplayValue : "未配置" } } $nicBufferConfig | Export-Csv -Path "网卡缓冲区配置.csv" -Encoding UTF8 -NoTypeInformation # 9. 导出IPv6绑定状态 Get-NetAdapterBinding -ComponentID ms_tcpip6 | Export-Csv -Path "IPv6绑定状态.csv" -Encoding UTF8 -NoTypeInformation
导出完成后所有CSV文件可以直接用Excel打开,手动将需要的内容复制到同一个工作簿的不同工作表即可。
方案二:直接生成多工作表Excel文件(无需手动整理,需本地安装Excel)
如果需要自动把所有结果汇总到同一个Excel文件的不同工作表,可以调用Excel COM对象实现,脚本如下:
# 初始化Excel应用对象 $excel = New-Object -ComObject Excel.Application $excel.Visible = $false # 改为$true可以看到生成过程 $workbook = $excel.Workbooks.Add() # -------------------------- # 1. 写入域信息工作表 $sheet = $workbook.Worksheets.Add() $sheet.Name = "域信息" $data = Get-ComputerInfo | select CsDomain $row = 1 foreach ($prop in $data[0].PSObject.Properties.Name) { $sheet.Cells.Item($row, 1) = $prop $sheet.Cells.Item($row, 2) = $data[0].$prop $row++ } # -------------------------- # 2. 写入管理员组成员工作表 $sheet = $workbook.Worksheets.Add() $sheet.Name = "管理员组成员" $data = Get-LocalGroupMember -Group Administrators # 写入表头 $col = 1 foreach ($prop in $data[0].PSObject.Properties.Name) { $sheet.Cells.Item(1, $col) = $prop $col++ } # 写入行数据 $row = 2 foreach ($item in $data) { $col = 1 foreach ($prop in $item.PSObject.Properties.Name) { $sheet.Cells.Item($row, $col) = $item.$prop $col++ } $row++ } # 其他命令的写入逻辑和上面一致,按需添加即可 # 保存文件并退出 $workbook.SaveAs("系统信息汇总.xlsx") $excel.Quit() # 释放COM对象,避免Excel后台进程残留 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
常见问题说明
- 如果运行脚本提示无权执行,先以管理员身份运行PowerShell,执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,输入Y确认即可。 - 已安装软件查询推荐用更安全的注册表查询方案替代Win32_Product:
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Where-Object {$_.DisplayName -ne $null} | Select-Object DisplayName, Publisher, InstallDate | Sort-Object DisplayName
内容的提问来源于stack exchange,提问作者user16823925
相关产品推荐
相关产品推荐

