0

我目前正在完成我的 PS 脚本以从服务器列表中获取时间并将它们导出到 .txt 文件。问题是有连接问题的服务器只给出了一个 PS 错误。我希望有连接问题的服务器也被记录下来,并且只是一条消息,即“服务器服务器名称无法访问”。非常感谢你的帮助!

cls
$server = Get-Content srvtime_list.txt
Foreach ($item in $server)
{
 net time \\$item | find /I "Local time" >> srvtime_result.txt
}
4

4 回答 4

1

除了回答你的问题,还有其他/更好的方式来获得时间(正如其他人所建议的那样):

  1. 您可以通过将错误流重定向到 null 来抑制错误。
  2. 检查 $LASTEXITCODE 变量,除 0 以外的任何结果都表示命令未成功完成。

    Get-Content srvtime_list.txt | Foreach-Object{
    
       net time \\$_ 2>$null | find /I "Current time" >> srvtime_result.txt
    
       if($LASTEXITCODE -eq 0)
       {
           $result >> srvtime_result.txt
       }
       else
       {
        "Server '$_' not reachable" >> srvtime_result.txt
       }        
    

    }

于 2013-06-25T08:31:53.170 回答
1

我可能会稍微重写你的代码:

Get-Content srvtime_list.txt |
  ForEach-Object {
    $server = $_
    try {
      $ErrorActionPreference = 'Stop'
      (net time \\$_ 2>$null) -match 'time'
    } catch { "Server $server not reachable" }
  } |
  Out-File -Encoding UTF8 srvtime_result.txt
于 2013-06-25T08:39:09.850 回答
0

我会做这样的事情:

Get-Content srvtime_list.txt | %{
   $a = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $_ -erroraction 'silentlycontinue'
   if ($a) { "$_ $($a.ConvertToDateTime($a.LocalDateTime))"  } else { "Server $_ not reachable" }
} | Set-Content srvtime_result.txt
于 2013-06-25T02:37:50.013 回答
0

使用Test-Connectioncmdlet 验证远程系统是否可访问。

cls
$server = Get-Content srvtime_list.txt
Foreach ($item in $server)
{
 if (test-connection $item) {
     net time \\$item | find /I "Local time" >> srvtime_result.txt
    } else {
   "$item not reachable" | out-file errors.txt -append
}
}

但是您可以在纯 Powershell 中执行此操作,而无需net time使用 WMI。这是未经测试的,因为我目前没有方便的 Windows,但它至少有 90% 在那里。

cls
$server = Get-Content srvtime_list.txt
$ServerTimes = @();
Foreach ($item in $server)
{
 if (test-connection $item) {
     $ServerTimes += Get-WMIObject -computername $name win32_operatingsystem|select systemname,localdatetime 
    } else {
   "$item not reachable" | out-file errors.txt -append
}
}
$ServerTimes |Out-File srvtime_result.txt
于 2013-06-25T02:26:04.960 回答