Как создать «повторное подключение» для подключения к общей сети? - PullRequest
0 голосов
/ 05 июля 2019

Я хочу подключиться к общей папке.Я хочу повторить попытку подключения к общей папке, которую я хочу, если после этого соединение не будет установлено, я делаю следующий процесс.

Я попробовал этот код.Я могу подключиться к серверу.Но если соединение имеет проблему, оно просто ждет около 5 секунд, а затем возвращается, что сеть не найдена.

$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, "$008", "$25")
}

$Next = "Do Next Process"

Я ожидаю, что сначала я могу повторить попытку подключения.Пока он не подключен, выполните следующий процесс.

1 Ответ

1 голос
/ 05 июля 2019

Для этого можно использовать цикл, в этом примере 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 попыток.Не стесняйтесь редактировать этот номер в соответствии со своими потребностями.

Связанная статья, если вы хотите узнать больше о циклах .


РЕДАКТИРОВАТЬ :согласно комментариям + обсуждение в чате, здесь код, который будет пытаться подключаться бесконечно и не будет возвращать какую-либо информацию в случае сбоя

Я лично не рекомендую это решение из-за бесконечного цикла и отсутствия информации оошибка, которая может быть полезна для отладки.

$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
...