基于服务器状态更新CSV文件并生成Appx包报告的PowerShell脚本功能确认
基于服务器状态更新CSV文件并生成Appx包报告的PowerShell脚本功能确认
看起来你需要一个能跟踪服务器在线状态、动态更新源CSV,同时生成Appx包扫描报告的PowerShell脚本,我来帮你梳理下这个方案的功能和实现细节:
需求场景说明
你有一个记录服务器列表的CSV文件(比如computers.csv/computers2.csv),初始只有name列记录服务器FQDN:
name
Server01.contoso.local
Server02.contoso.local
Server03.contoso.local
Server04.contoso.local
Server05.contoso.local
Server06.contoso.local
你希望实现两个核心目标:
- 每次运行脚本时,更新源CSV的
appx列:标记服务器是在线可访问(Port open or computer reachable)还是离线不可达(Port closed or computer unreachable),且后续运行时只会重新检查之前标记为离线或未标记的服务器 - 生成一个
MSStoreReport.csv报告,记录成功访问的服务器上的所有Appx包信息,失败访问的服务器则记录错误状态
脚本功能拆解(更新版代码)
下面是你提供的更新版PowerShell脚本,我标注了关键逻辑:
# 1. 导入源服务器列表CSV $computers = Import-Csv "C:\temp\computers2.csv" $AllResults = foreach ($computer in $computers) { try { # 2. 只处理之前标记为离线或未设置状态的服务器,避免重复检查在线服务器 if (($computer.appx -eq 'Port closed or computer unreachable') -Or ($null -eq $computer.appx)){ # 3. 远程执行Appx包扫描命令,成功则收集包信息 Invoke-Command -ComputerName $computer.name -ScriptBlock { Get-AppxPackage -AllUsers } -ErrorAction 'Stop' | ForEach-Object { [pscustomobject]@{ "ComputerName" = $computer.Name "Appx" = $_.Name -join ";" } } # 4. 标记该服务器为在线可访问 $Computer.Appx = "Port open or computer reachable" } } catch { # 5. 执行失败时,标记服务器为离线不可达 $Computer.Appx = "Port closed or computer unreachable" } } # 6. 将扫描结果追加到报告CSV(在线服务器的Appx列表/离线服务器的错误状态) $AllResults | Export-Csv -Path "C:\Temp\MSStoreReport.csv" -NoTypeInformation -Encoding 'UTF8' -Append # 7. 更新源CSV文件,保存最新的服务器状态标记 $computers | Export-Csv -Path "C:\temp\computers2.csv" -NoTypeInformation -Encoding 'UTF8'
运行流程验证
- 第一次运行:所有服务器初始无
appx列,脚本会逐一检查,在线的(Server01、Server03、Server06)会被标记为Port open or computer reachable并收集Appx包信息写入报告;离线的(Server02、Server04、Server05)标记为Port closed or computer unreachable,报告中记录对应错误状态。源CSV会新增appx列并保存所有状态。 - 第二次运行:脚本只会检查之前标记为
Port closed or computer unreachable的服务器,如果此时Server02恢复在线,会更新它的状态为Port open or computer reachable,并收集它的Appx包信息追加到报告,其他已标记在线的服务器不会重复检查,提升效率。
注意事项
- 确保运行脚本的账号有远程服务器的管理员权限,且目标服务器启用了WinRM(PowerShell远程管理)
- 若需要调整检查的端口或连通性方式,可以在
Invoke-Command前添加测试逻辑(比如Test-Connection或Test-NetConnection) - 报告CSV使用
-Append参数,会持续累积所有扫描结果,若需要每次生成全新报告,可去掉该参数(但会覆盖旧报告)
备注:内容来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

