如何创建 "retry" 连接以连接到共享网络?
How to create "retry" connection to connect to share network?
我想连接到共享文件夹。如果连接仍然未连接,我想重试连接到我想要的共享文件夹,然后我进行下一个过程。
我试过这段代码。我可以连接到服务器。但是如果连接有问题,它只是等待大约 5 秒,然后 return 找不到网络。
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
if(Test-Path -Path "P:"){
Write-Host "Connected"
}
else
{
Write-Host "Try Again"
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\$Get_IP\Temp\BP", $False, "[=11=]8", "")
}
$Next = "Do Next Process"
我的期望是,我可以先重试连接。直到连接成功,再进行下一步处理。
您可以利用循环来执行此操作,在该示例中 do...until
:
$n = 0
do {
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
$n++
Write-Host "Attempt no $n"
} until ((Test-Path -Path "P:") -or ($n -ge 30))
# Information about success/failure
if (Test-Path -Path "P:") {
Write-Host "Connected successfully after $n attempts"
} else {
Write-Host "Connection failed"
}
为了避免无限循环,我添加了计数器$n
并指定在尝试30次后结束循环。请随意根据您的需要编辑该号码。
Related article if you want to learn more about loops.
编辑:根据评论+聊天讨论,这里的代码将无限期地尝试连接而不是return任何失败情况下的信息
我个人不推荐该解决方案,因为无限循环并且没有可能对调试有用的故障信息。
$n = 0
do {
$n++
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
Write-Host "Attempt no $n"
} until (Test-Path -Path "P:")
Write-Host "Connected successfully after $n attempts"
类似的解决方案可以重写为函数(这次使用 While
循环,因为如果共享已经连接,我不想重新连接):
function Check-ConnectionToServer {
$n = 0
while (-not (Test-Path -Path "P:")) {
$n++
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
Write-Host "Attempt no $n"
}
Write-Host "Connected successfully after $n attempts"
return $true
}
然后随时使用它以确保连接处于活动状态。
# Previous cmdlets
Check-ConnectionToServer
# Next cmdlets
我想连接到共享文件夹。如果连接仍然未连接,我想重试连接到我想要的共享文件夹,然后我进行下一个过程。
我试过这段代码。我可以连接到服务器。但是如果连接有问题,它只是等待大约 5 秒,然后 return 找不到网络。
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
if(Test-Path -Path "P:"){
Write-Host "Connected"
}
else
{
Write-Host "Try Again"
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\$Get_IP\Temp\BP", $False, "[=11=]8", "")
}
$Next = "Do Next Process"
我的期望是,我可以先重试连接。直到连接成功,再进行下一步处理。
您可以利用循环来执行此操作,在该示例中 do...until
:
$n = 0
do {
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
$n++
Write-Host "Attempt no $n"
} until ((Test-Path -Path "P:") -or ($n -ge 30))
# Information about success/failure
if (Test-Path -Path "P:") {
Write-Host "Connected successfully after $n attempts"
} else {
Write-Host "Connection failed"
}
为了避免无限循环,我添加了计数器$n
并指定在尝试30次后结束循环。请随意根据您的需要编辑该号码。
Related article if you want to learn more about loops.
编辑:根据评论+聊天讨论,这里的代码将无限期地尝试连接而不是return任何失败情况下的信息
我个人不推荐该解决方案,因为无限循环并且没有可能对调试有用的故障信息。
$n = 0
do {
$n++
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
Write-Host "Attempt no $n"
} until (Test-Path -Path "P:")
Write-Host "Connected successfully after $n attempts"
类似的解决方案可以重写为函数(这次使用 While
循环,因为如果共享已经连接,我不想重新连接):
function Check-ConnectionToServer {
$n = 0
while (-not (Test-Path -Path "P:")) {
$n++
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("P:", "\192.168.1.2\Temp\BP", $False, "008", "25")
Write-Host "Attempt no $n"
}
Write-Host "Connected successfully after $n attempts"
return $true
}
然后随时使用它以确保连接处于活动状态。
# Previous cmdlets
Check-ConnectionToServer
# Next cmdlets