【发布时间】:2014-07-30 10:47:17
【问题描述】:
我在@Ansgar 的帮助下编写了一个脚本。下面是脚本的代码。该脚本检查 Ping、RDP、远程注册表和 WMI 检查远程计算机。服务器名称输入文本文件 servernames.txt 脚本执行后,UP 的服务器记录在名为 Online.txt 的文本文件中,DOWN 的服务器记录在 Offline.txt 中记录的格式为下面:
在线.TXT
<servername>
PING : SUCCESS
RDP : SUCCESS
Remote Registry : SUCCESS
WMI : SUCCESS
OFFLINE.TXT
<servername>
PING : SUCCESS
RDP : FAIL
Remote Registry : SUCCESS
WMI : SUCCESS
这是我到现在为止的脚本:
#Text file to pick the server names. Path is hard coded to c:\temp\serverlist.txt
$servers = Get-Content "C:\temp\serverlist.txt"
ForEach ($server in $servers)
{
Write-Host `n
Write-Host $server
Write-Host `n
#PING
$ping = Test-Connection -ComputerName $server -Quiet -Count 1
#RDP
$rdp = Test-NetConnection -ComputerName $server -CommonTCPPort RDP -InformationLevel Quiet
#REMOTE REGISTRY
$regkey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey ([Microsoft.Win32.RegistryHive]::LocalMachine,$server)
$ref = $regkey.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
#WMI
$wmi = Get-WmiObject -Query "Select * from Win32_PingStatus where Address = '$server'"
$state_noun = @{
$true = 'SUCCESS'
$false = 'FAIL'
}
$state_verb = @{
$true = 'SUCCEEDED'
$false = 'FAILED'
}
$result = @"
PING : $($state_noun[$ping])
RDP : $($state_noun[$rdp])
Remote Registry : $($state_noun[[bool]$ref])
WMI : $($state_noun[[bool]$wmi])
"@
}
如何将服务器及其结果输出到文本文件(online.txt 和 offline.txt)?提前谢谢你。
【问题讨论】:
-
使用
>或Out-File -
@Raf 我可以让 Out-File 工作,但是如何将 FAIL 状态服务器重定向到 Offline.txt 并将 SUCCESS 状态服务器重定向到 Online.txt?我是哈希表概念的新手。
-
我只是尝试了这个逻辑,它没有将结果写入文件: If($result -contains 'FAIL') { $result |输出文件 c:\temp\offline.txt } elseif($result -contains 'SUCCESS') { $result |输出文件 c:\temp\online.txt }
-
-contains 运算符与 string.Contains() 不同。 -contains 运算符用于了解集合是否具有某个元素(即@(1,2,3) -contains 3)。改用 $result.Contains('FAIL')。
标签: powershell hashtable