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"
}
}