Powershell 输出文件保持为空

Powershell 输出文件保持为空,powershell,Powershell,我有一个包含所有服务器的txt列表。我想要的是: 此列表中的每台服务器都需要ping。结果需要保存在一个文件中 然而,问题是我一直收到错误消息/空输出文件 $ServerListFile = "c:\temp\ServerList.txt" $ServerList = Get-Content $ServerListFile $output = foreach ($s in $ServerList) { if (Test-Connection -ComputerName $s -co

我有一个包含所有服务器的txt列表。我想要的是:

此列表中的每台服务器都需要ping。结果需要保存在一个文件中

然而,问题是我一直收到错误消息/空输出文件

$ServerListFile = "c:\temp\ServerList.txt"    
$ServerList = Get-Content $ServerListFile 
$output = foreach ($s in $ServerList) {
  if (Test-Connection -ComputerName $s -count 1 -Quiet ) {
    "$S is alive"
  }
  else {
    "$S is not responding"
  }
}
Out-File -FilePath "C:\temp\ServerStatus.txt"
此代码给出了错误信息:

两次。 据我所知,变量
$s
为空

但是,这一行应该用
c:\temp\ServerList.txt


请对此提供一些见解(powershell初学者)

看起来
$serverList
可能包含一行或多行空行,从而导致您看到的错误

您可以在
foreach()
循环声明中使用
Where Object
过滤掉空行和仅空白行:

$output = foreach ($s in $ServerList |Where-Object {$_.Trim() -ne ''}){
    # ...
}

该方法将删除任何前导和尾随的空白字符,因此如果
$\u0.Trim()
等于空字符串
'
,则我们知道原始字符串必须已经是空字符串或全部空白。
-ne
运算符表示notequal.

看起来
$serverList
可能包含一行或多行空行,从而导致您看到的错误

您可以在
foreach()
循环声明中使用
Where Object
过滤掉空行和仅空白行:

$output = foreach ($s in $ServerList |Where-Object {$_.Trim() -ne ''}){
    # ...
}

该方法将删除任何前导和尾随的空白字符,因此如果
$\u0.Trim()
等于空字符串
'
,则我们知道原始字符串必须已经是空字符串或全部空白。
-ne
运算符表示notequal.

$ServerList
包含什么?它是什么类型的?(使用
$ServerList.getType()
进行测试)您没有为
输出文件提供任何输入-它不会神奇地知道您想要在文件中输入什么:)@t.Me:$ServerList是一个notepad文件,每行上都有一个服务器名。类型=IsPublic IsSerial Name BaseType------------------True对象[]系统。Array@MathiasR.Jessen:我还尝试了“$output | out file-FilePath C:\temp\ServerStatus.txt”相同的结果,但是
$ServerList
包含什么?它是什么类型的?(使用
$ServerList.getType()
进行测试)您没有为
输出文件提供任何输入-它不会神奇地知道您想要在文件中输入什么:)@t.Me:$ServerList是一个notepad文件,每行上都有一个服务器名。类型=IsPublic IsSerial Name BaseType------------------True对象[]系统。Array@MathiasR.Jessen:我还尝试了“$output | out file-FilePath C:\temp\ServerStatus.txt”相同的结果,但这确实解决了问题。奇怪的是,我检查了列表9x,以确保没有空行或空格。无论如何,谢谢你的帮助和解释。不客气!如果这个答案解决了这个问题,请考虑通过点击左边的复选标记来标记它“被接受”,这确实解决了这个问题。奇怪的是,我检查了列表9x,以确保没有空行或空格。无论如何,谢谢你的帮助和解释。不客气!如果这个答案解决了这个问题,请考虑通过点击左边的复选标记来标记“接受”。