Объединение двух операторов PowerShell do.. while - PullRequest
0 голосов
/ 29 августа 2018

У меня есть два утверждения PowerShell do..while, которые прекрасно работают отдельно. Тем не менее, я хочу объединить их и использовать логику обоих.

Код ниже разделен на 3 раздела. Первый полон объявлений переменных, которые охватывают оба оператора. Вторым является первый оператор Do-While, который заставляет скрипт не двигаться вперед с другими процессами до полной загрузки веб-страницы IE. В третьем разделе есть второй оператор Do-While, который строго возвращает оператор «loading» до тех пор, пока процесс не загрузится, а затем возвращает оператор «loaded ».

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

$elementID = "loginHeader"
$elementMatchText = "Pick an account"
$timeoutMilliseconds = 5000
$timeStart = Get-Date
$exitFlag = $false
$started = $false
$ie = (New-Object -Com SXcript.Shell).Run("http://www.msn.com", 3)

do {
    sleep -Milliseconds 100
    if ( $ie.ReadyState -eq 4 ) {
        $elementText = (($ie.Document).GetElementByID($elementID )).InnerText
        $elementMatch = $elementText -match $elementMatchText
    }
    $timeout = ((Get-Date).Subtract($timeStart)).TotalMilliseconds -gt $timeoutMilliseconds
    $exitFlag = $elementMatch -or $timeout
} until ( $exitFlag )
Start-Sleep -m 500
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")

do {
    $status = Get-Process iexplore
    if (!($status)) {
        Write-Host 'Internet Explorer is starting';
        Start-Sleep -m 100
    } else {
        Write-Host 'Internet Explorer has started';
        $started = $true
    }
} until ($started)

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете вкладывать их с условием if, чтобы запускать второй цикл только после выполнения критериев первого цикла.

Do {
    sleep -milliseconds 100
    If ( $ie.ReadyState -eq 4 ) {
        $elementText = (($ie.Document).getElementByID($elementID )).innerText
        $elementMatch = $elementText -match $elementMatchText
    }

    $timeout = ((Get-Date).subtract($timeStart)).TotalMilliseconds -gt $timeoutMilliseconds
    $exitFlag = $elementMatch -or $timeout

    if($exitFlag){
        Start-Sleep -m 500
        [System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
        Do {
            $status = Get-Process iexplore
            If (!($status)) { Write-Host 'Internet Explorer is starting' ; Start-Sleep -m 100}
            Else { Write-Host 'Internet Explorer has started' ; $started = $true }
        }
        Until ($started)
    }
} Until ($exitFlag)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...