Загрузка данных



function Start-CmdWindow {
    param(
        [string]$Title,
        [string]$Command,
        [int]$X,
        [int]$Y,
        [int]$Width = 600,
        [int]$Height = 280
    )

    $absoluteX = $bounds.X + $X
    $absoluteY = $bounds.Y + $Y

    # Відокремлюємо аргументи ping
    $pingArguments = $Command -replace '^\s*ping(?:\.exe)?\s*', ''
    $pingArgs = @($pingArguments -split '\s+' | Where-Object { $_ })
    $argsJson = ConvertTo-Json -InputObject $pingArgs -Compress

    # Скрипт обробки ping в окремому PowerShell
    $innerScript = @"
`$handler = [ConsoleCancelEventHandler]{
    param(`$sender, `$eventArgs)
    `$eventArgs.Cancel = `$true
}
[Console]::add_CancelKeyPress(`$handler)

try {
    `$pingArgs = ConvertFrom-Json '$argsJson'
    & "`$env:WINDIR\System32\ping.exe" @pingArgs 2>&1 |
        ForEach-Object {
            Write-Output ("{0} {1}" -f (Get-Date -Format 'HH:mm:ss'), `$_)
        }
}
finally {
    [Console]::remove_CancelKeyPress(`$handler)
}
"@

    $encoded = [Convert]::ToBase64String(
        [System.Text.Encoding]::Unicode.GetBytes($innerScript)
    )

    $p = Start-Process "$env:WINDIR\System32\cmd.exe" `
        -ArgumentList "/k title $Title & powershell.exe -NoProfile -EncodedCommand $encoded" `
        -PassThru

    for ($i = 0; $i -lt 50; $i++) {
        $p.Refresh()
        if ($p.MainWindowHandle -ne 0) { break }
        Start-Sleep -Milliseconds 1
    }

    if ($p.MainWindowHandle -ne 0) {
        [void][WinMove]::SetWindowPos(
            $p.MainWindowHandle,
            [IntPtr]::Zero,
            $absoluteX, $absoluteY,
            $Width, $Height, 0
        )
    }
    else {
        Write-Host "Не вдалося знайти вікно $Title"
    }
}