微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Test-NetConnection 在不应执行时在交换机中执行

如何解决Test-NetConnection 在不应执行时在交换机中执行

我有一个使用菜单和选择的 powershell 脚本。所以循环直到选择为 0。对于一个选择,它使用“Test-NetConnection”测试输入的端口。但是由于某种原因,在运行后,每当进行另一个选择时,似乎总是运行“Test-NetConnection”,横幅会显示在 powershell 中(即使它非常快,但不应执行。

删除了一些选择。而且我还有一些自定义功能。但不确定为什么会发生这种情况。任何帮助将不胜感激!

Powershell...

while ($selection -ne 0) {



    Write-Output ""
    Write-Output "__MENU__"
    Write-Output "0. Exit"
    Write-Output "1. Set Target Machines"
    Write-Output "2. Set Save Directory"
    Write-Output "4. Save MSINFO32"
    Write-Output "5. Save All Installed Software"
    Write-Output "9. Save GPO Info (gpresult)
    Write-Output "10. Test WMI"
    Write-Output "11. Test TCP Port"
    Write-Output "14. Test Syslog"
    Write-Output ""
    
    Write-Output "Target Machines: $($targetComputers -Join ',')"
    Write-Output "Save Directory: $savePath`n"
    
    $selection = Read-Host -Prompt "Selection"
    Write-Output ""
    
    switch ($selection) {
        0 { break }
        1 { ... }
        2 { ... }
        11 {
            $testPort = Read-Host -Prompt "TCP Port to Test (Leave blank for default: 80)"
            Write-Output ""
            if (($testPort -eq $null) -Or ($testPort -eq "")) { $testPort = 80 }

            foreach ($computer in $targetComputers) {

                try {
                    $netcon = Test-NetConnection -ComputerName $computer -Port $testPort -ErrorAction "Stop"
                    if($netcon.TcpTestSucceeded) { Write-Output "TCP Port $testPort test was successful on $computer." }
                    else { Write-Warning "TCP Port $testPort test was unsuccessful on $computer." }
                }
                catch { Write-Warning "TCP Port $testPort test was unsuccessful on $computer." }
            }


        } #11

        14 {
            $sysServer = Read-Host -Prompt "Syslog Server (Leave blank for default: ${env:computername})"
            $sysProto = Read-Host -Prompt "Syslog Server Protocol (Leave blank for default: TCP)"
            $sysPort = Read-Host -Prompt "Syslog Server Port (Leave blank for default: 514)"
            Write-Output ""

            if (($sysServer -eq $null) -Or ($sysServer -eq "")) { $sysServer = $env:computername }
            if (($sysProto -eq $null) -Or ($sysProto -eq "")) { $sysProto = "TCP" }
            if (($sysPort -eq $null) -Or ($sysPort -eq "")) { $sysPort = 514 }

            sendSyslog -Server $sysServer -Protocol $sysProto -Port $sysPort
            
        } #14
        default { break }
   } #switch
} #while

解决方法

您的菜单选项 "9. Save GPO Info (gpresult) 缺少结束语。

让自己更轻松,并在菜单中使用 Here-String

$menu = @"

__MENU__
0. Exit
1. Set Target Machines
2. Set Save Directory
4. Save MSINFO32
5. Save All Installed Software
9. Save GPO Info (gpresult)
10. Test WMI
11. Test TCP Port
14. Test Syslog

"@

然后,不要像 while ($selection -ne 0) 那样循环,而是运行无限循环,只要用户输入“0”,您就可以退出。

# enter an endless loop here.
# exit that loop right after the Read-Host when the user type '0'
while ($true) {
    Write-Host $menu

    # some in-between code.. #
    $selection = Read-Host -Prompt "Selection"
    if ($selection -eq '0') { break }  # or exit if you want to stop the entire script here
    # rest of your code.. #
}

附言从 Read-Host 返回的任何内容都是字符串,而不是数字。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。