如何创建 "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