PowerShell测试连接“首次响应”

时间:2017-06-13 13:54:11

标签: powershell powershell-v3.0 powershell-v4.0

我们在公司中使用Citrix,并且有两个访问Citrix StoreFront的地址:

  1. internal-access.company.com
  2. external-access.company.com
  3. 链路1仅在内部网络(本地或VPN)上有效,而链路2仅在内部网络不在时才有效。这使得用户可以猜测他们需要双击桌面上的快捷方式。

    为了解决最终用户的困惑,我在下面写了这个小片段。它的工作方式与预期的一样,但是因为它依赖于PING来查看是否可以通过内部服务器来判断......执行速度很慢。

    我想做的是在收到PING的响应后立即执行相关的块,而不是等待所有4次PING尝试完成。这在PowerShell中是否可行?

    因此,而不是“ PING 4次,如果收到至少1个响应,则运行块”它是“ PING 4次,并且在第一个响应运行块”。< / p>

    if(Test-Connection -Quiet -ComputerName "10.10.10.10" -Count 2){
    
        $url = "http://internal-access.company.com"
        $ie = New-Object -com internetexplorer.application; 
        $ie.visible = $true;
        $ie.navigate($url);
    
    }elseif(Test-Connection -Quiet -ComputerName "8.8.8.8" -Count 4){
    
        $url = "https://external-access.company.com"
        $ie = New-Object -com internetexplorer.application; 
        $ie.visible = $true;
        $ie.navigate($url);
    
    }else{
    
        $wshell = New-Object -ComObject Wscript.Shell
        $wshell.Popup("Unable to connect to Citrix. Please check your network connection and call the Service Desk on +44(0)207 111 1111 if you require assistance. Thank you.",0,"No network connection detected!",0x1)
    
    }
    

    提前致谢, 仲裁器

3 个答案:

答案 0 :(得分:3)

这应该是解决问题的好方法:

请注意我正在使用Start-Process在默认浏览器中启动网页,以方便使用。

Function Test-QuickConnection($ip,$count=4,$ttl=50){
    $attempts = 0
    do{
        $connected = Test-Connection $ip -Quiet -Count 1 -TimeToLive ([math]::Ceiling(($ttl/$count)))
    } while ((++$attempts -lt $count) -and !$connected)
    return $connected
}

if (Test-QuickConnection "10.10.10.10"){
    Start-Process "http://internal-access.company.com"
} elseif (Test-QuickConnection "8.8.8.8"){
    Start-Process "https://external-access.company.com"
} else {
    Add-Type -AssemblyName "System.Windows.Forms"
    [System.Windows.Forms.MessageBox]::Show("Unable to connect to Citrix")
}

答案 1 :(得分:2)

您可以使用-Count 1测试4个ping,并在ping正常时中断循环:

for($i = 0; $i -lt 4; $i++){
    if(Test-Connection -Quiet -ComputerName "8.8.8.8" -Count 1){
        $url = "https://external-access.company.com"
        $ie = New-Object -com internetexplorer.application
        $ie.visible = $true
        $ie.navigate($url)
        break
    }
}

#Script continues

答案 2 :(得分:1)

您可以检查测试连接的状态代码,如:

Test-Connection -Quiet -ComputerName "8.8.8.8" -Count 1

但我建议你在这种情况下只检查一次。将计数设为1,如:

proc sql  NOERRORSTOP;
connect to hadoop (Server=&HDP_Server. port = &port.);
execute (drop table if exists SCHEMA1.XYZ) by hadoop;
disconnect from hadoop;
quit;