PowerShell读取txt文件提示.txt无效,该如何排查修复?
PowerShell脚本报错原因及修复方案
错误点梳理
- 核心参数传值错误:
foreach遍历txt内容拿到的每台计算机名存储在变量$POS中,但你调用Get-Service、Set-Service时,-ComputerName参数错误传入了存储txt路径的$POSName变量,系统将文件路径当做计算机名解析,就会触发txt无效的报错。 - 变量名拼写错误:
Set-Service行的服务名参数使用了未定义的$Box.Name,实际应该为你前面声明的$Bex.Name,运行到此处会抛出变量不存在的错误。 - 逻辑位置错误:服务校验、启停的全部逻辑都写在
foreach循环外,最终只会处理txt最后一行对应的计算机,前面所有计算机的操作都会被覆盖丢弃。
修复后代码
$POSListPath = "$PSScriptRoot\Bex.txt" # 逐行读取txt中的计算机名遍历处理 foreach ($POS in (Get-Content $POSListPath)) { $Bex = Get-Service -ComputerName $POS | Where-Object { $_.name -eq "BexServ" } If ($null -eq $Bex) { # 服务不存在 Write-Host "$POS 上未找到BexServ服务" -ForegroundColor Red } Else { # 服务存在 Write-Host "在 $POS 上找到服务 $($Bex.Name)" -ForegroundColor Green If ($Bex.Status -eq "Running") { # 停止服务 Set-Service -status stopped -ComputerName $POS -name $Bex.Name -ErrorAction Stop Write-Host "$POS 上的 $($Bex.Name) 服务已成功停止" -ForegroundColor Green } else { Write-Host "$POS 上的 $($Bex.Name) 服务已经是停止状态" -ForegroundColor Green } } }
内容的提问来源于stack exchange,提问作者Fcarias38
相关产品推荐
相关产品推荐

