【发布时间】:2019-11-12 07:49:57
【问题描述】:
Test-NetConnection 在手动运行时返回 TRUE,但在循环脚本中,只有部分端口返回 TRUE。
我编写了一个 powershell 脚本,它循环通过端口号来执行 Test-NetConnection:
$machine = '[targetmachinename]'
$this_machine = $env:COMPUTERNAME
$port_arr = @(8331, 8332, 8333, 8334, 8335, 8310, 8311)
foreach ($port in $port_arr) {
Test-NetConnection $machine.domain.name.com -port $port -InformationLevel Quiet
}
当我运行脚本时,它总是在相同的两个端口号上返回 TRUE,而在其他端口上返回 FALSE。
当我为每个端口手动运行代码时,它们对于所有端口都返回为 TRUE。
我尝试通过删除、添加和移动端口号来弄乱端口号,但它总是给出相同的结果,只有相同的两个端口号返回 TRUE。
我怀疑变量、数组、foreach 循环或其他东西可能不好,但如果是这种情况,为什么即使我更改了数组,它也适用于相同的两个端口而不适用于其他端口?
我正在考虑在循环之间设置延迟或等待,但尚未对其进行测试。
当从目标机器本地运行时,此脚本工作正常。从另一台机器运行脚本时出现此问题。
更新: 查看powershell日志:
Command start time: 20191111121539
**********************
PS>TerminatingError(New-Object): "Exception calling ".ctor" with "2" argument(s): "No connection could be made because the target machine actively refused it [IPADDRESS]:[PORT]""
我注意到 IPADDRESS 与目标机器名称不匹配,而是与源机器匹配。
我将 $machine.domain.name.com 替换为机器的实际 IP 地址,这使脚本按预期工作。
为什么 $machine.domain.name.com 会解析到源机器?即使我错误地连接它,那通常不会成为一个未解决的地址和错误吗?那时所有端口检查不应该都失败了吗?
【问题讨论】:
标签: powershell