如何添加列以展示操作系统与PowerShell版本信息?
解决方法:添加操作系统和PowerShell版本列
嘿,我来帮你搞定这个需求!你已经有了获取PowerShell版本的命令,现在只需要扩展脚本块,同时抓取操作系统信息,再把这些数据规整成结构化输出,就能轻松添加对应的列了。
第一步:修改Invoke-Command脚本块,同时获取OS和PS版本
直接在远程执行的脚本块里,用[PSCustomObject]把需要的字段打包,这样返回的结果本身就是带列的对象,方便后续输出:
$remoteInfo = Invoke-Command -ComputerName $wks -Credential $cred -Scriptblock { [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME OSVersion = (Get-CimInstance -ClassName Win32_OperatingSystem).Caption PSVersion = $PSVersionTable.PSVersion.ToString() } } -ErrorAction SilentlyContinue
代码解释:
ComputerName:返回目标机器的名称,方便你对应到具体设备OSVersion:通过Get-CimInstance获取操作系统的友好名称(比如Windows 11 Pro、Windows Server 2019 Datacenter),比单纯的版本号更直观PSVersion:把$PSVersionTable.PSVersion对象转成字符串,避免输出时显示版本的细分字段(比如Major、Minor)
第二步:整合到现有工作流(批量处理示例)
如果你是批量处理多台机器,可以把结果收集到数组里,最后统一输出成表格:
# 初始化结果数组 $allResults = @() # 遍历目标机器列表 foreach ($computer in $wks) { $machineInfo = Invoke-Command -ComputerName $computer -Credential $cred -Scriptblock { [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME OSVersion = (Get-CimInstance -ClassName Win32_OperatingSystem).Caption PSVersion = $PSVersionTable.PSVersion.ToString() } } -ErrorAction SilentlyContinue # 处理无法连接的机器,添加提示信息 if (-not $machineInfo) { $machineInfo = [PSCustomObject]@{ ComputerName = $computer OSVersion = "无法连接/获取信息" PSVersion = "无法连接/获取信息" } } $allResults += $machineInfo } # 输出带列的表格 $allResults | Format-Table -AutoSize
小贴士
- 如果你的现有脚本已经在收集其他机器信息(比如CPU、内存),可以直接把
OSVersion和PSVersion字段加到你现有的PSCustomObject里,不用单独创建对象 - 如果你需要把结果导出到CSV文件,只需要把最后一行改成
$allResults | Export-Csv -Path "机器信息.csv" -NoTypeInformation
内容的提问来源于stack exchange,提问作者Simone




