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