PowerShell导出服务器IE状态至CSV时$Status值为空问题
PowerShell批量禁用IE11导出CSV无State值故障修复
核心故障原因
- 变量作用域问题:
$IEStatus在Invoke-Command的远程脚本块内部定义,本地会话无法直接访问该变量,远程执行结果没有被本地接收赋值 - 语法错误:
foreach循环未包裹大括号、elseif没有对应的前置if判断、CSV导出路径引号位置错误、路径拼写有误 - 逻辑错误:IE状态判断代码放在
Invoke-Command外部,还未拿到远程返回的状态就执行了判断赋值,$Status未被正确初始化
修复后代码
# 初始化结果数组 $CsvStatus = @() # 筛选符合条件的服务器 $FilteredServers = $AllServers | Where-Object { ($PSItem.OS -like "*$OperatingSystem*") -and ($PSItem.Type -eq $Type) -and ($PSItem.Citrix -eq $False)} # 遍历服务器列表 foreach ($Server in $FilteredServers) { # 判断是否为2012/2016系统 if ($OperatingSystem -eq '2012' -or $OperatingSystem -eq '2016') { # 接收远程执行返回的IE状态结果 $IEStatus = Invoke-Command -ComputerName $Server.ServerName -ScriptBlock { # 禁用IE11功能 dism /online /Disable-Feature /FeatureName:Internet-Explorer-Optional-amd64 /NoRestart | Out-Null # 获取IE功能状态并返回给本地 return Get-WindowsOptionalFeature -Online -FeatureName Internet-Explorer-Optional-amd64 } # 基于返回结果赋值Status if ($IEStatus.State -eq 'DisablePending') { $Status = 'DisablePending' } else { $Status = 'Unknown' } # 追加结果到数组 $CsvStatus += [PSCustomObject]@{ ServerName = $Server.ServerName State = $Status } } } # 导出结果到CSV,去除冗余类型头 $CsvStatus | Export-Csv -Path "C:\temp\effectedServer.csv" -NoTypeInformation -Encoding UTF8
修复说明
- 把
Invoke-Command的执行结果赋值给本地$IEStatus变量,实现远程状态的本地读取 - 修正了所有语法结构错误,补全循环、判断的大括号,修正导出路径的格式
- 新增
Out-Null屏蔽dism命令的冗余输出,避免影响返回结果 - 导出CSV时添加
-NoTypeInformation参数去除头部冗余类型信息,添加编码参数避免中文乱码
内容的提问来源于stack exchange,提问作者Maks
相关产品推荐
相关产品推荐

