Избежание ошибки переполнения глубины вызова - PullRequest
0 голосов
/ 19 декабря 2018

Я создал сценарий для проверки интернет-соединения между двумя точками, однако через ~ 1 час сценарий завершается с ошибкой с

Сценарий не выполнен из-за переполнения глубины вызова.

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

0435081769$targetAddress = 'Target-PC'
$outputDir = 'C:\Support\Logs'
$outputFile = 'NetworkStabilityLog.csv'

function Set-ConsoleWindow() {
    $pshost = Get-Host
    $pswindow = $PSHost.UI.RawUI
    $newsize = $PSWindow.WindowSize
    $newsize.Width = 50
    $newsize.Height = 15
    $PSWindow.WindowSize = $newsize
}

function Check-Dir() {
    if (!(Test-Path $outputDir\$outputFile)) {
        New-Item -ItemType Directory -Force -Path $outputDir
    }
    Add-Content $outputDir\$outputFile "Target Address, Status, Date"
    Clear
}

function Display-Message() {
    Write-Host "Testing connection to $targetAddress in progress"
    Write-Host
    Write-Host "Close window to stop test."
    Write-Host
}

function Ping-Network() {
    $date = Get-Date

    $checkIP = Test-Connection -ComputerName "$targetAddress" -Quiet -Count 1 -BufferSize 1

    if ($checkIP -Match "False") {
        Add-Content $outputDir\$outputFile "$targetAddress, Fail, $date"
        Write-Host "Connection Down at $Date"
    }

    Sleep-Script
}

function Sleep-Script() {
    Start-Sleep -Seconds 1
    Ping-Network
}

Set-ConsoleWindow
Check-Dir
Display-Message
Ping-Network

1 Ответ

0 голосов
/ 19 декабря 2018

Ping-Network и Sleep-Script рекурсивно вызывают друг друга, не прерывая их.Конечно, вы получаете переполнение там.Не делай этого. КОГДА-ЛИБО!

Если вы хотите бесконечный цикл: выполните бесконечный цикл.Удалите функцию Sleep-Script из своего кода и замените последнюю строку (Ping-Network) следующим:

while ($true) {
    Ping-Network
    Start-Sleep -Seconds 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...