我目前正在完成我的PS脚本以从服务器列表中获取时间并将它们导出到.txt文件。事情是,有连接问题的服务器只会产生PS错误。我希望记录连接问题的服务器,只需一条消息,即“服务器服务器名称无法访问”。非常感谢你的帮助!
cls
$server = Get-Content srvtime_list.txt
Foreach ($item in $server)
{
net time \\$item | find /I "Local time" >> srvtime_result.txt
}
答案 0 :(得分:1)
还有其他/更好的方式来获得时间(正如其他人建议的那样),但要回答你的问题:
检查$ 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
}
}
答案 1 :(得分: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
答案 2 :(得分:0)
使用Test-Connection
cmdlet验证远程系统是否可访问。
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
答案 3 :(得分: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