1) Копирование и вставка из буфера обмена из PowerShell ;
2) Запуск с повышенными правами доступа .
Объединение первого со вторым даст желаемый результат.
Следующий скрипт копирует строку с одной строкой в буфер обмена, получает одну строку из буфера обмена и передает ее для выполнения в powershell.exe, который запускается с повышенными правами.
Предупреждение: будьте осторожныс двойными кавычками.
$re = '^\S+\s+\S+\s+S-1-5-32-544'
"whoami.exe /groups | Select-String \""${re}\""" | clip.exe
Add-Type -AssemblyName System.Windows.Forms
$dummy = New-Object System.Windows.Forms.TextBox
$dummy.Multiline = $true
$dummy.Paste()
$command = $dummy.Text
$args = '-NoLogo', '-NoProfile', '-NoExit', "-Command ${command}"
Start-Process -FilePath powershell.exe -Verb runas -ArgumentList $args
Следующий скрипт демонстрирует, что можно передавать блоки многострочных скриптов.
Скрипт запускается сам три раза и останавливается.
& ($b = {
Write-Host $b
$re = '^\S+\s+\S+\s+S-1-5-32-544'
whoami.exe /groups | Select-String $re
if( $b -match 'return\s\}###' ) { return }
'&($b = {' + ($b -replace 'return\s\}', '$0#') + '})' | clip.exe
Add-Type -AssemblyName System.Windows.Forms
$dummy = New-Object System.Windows.Forms.TextBox
$dummy.Multiline = $true
$dummy.Paste()
$command = $dummy.Text
$args = '-NoLogo', '-NoProfile', '-NoExit'
$args += '-Command {0}' -f $command
Start-Process -FilePath powershell.exe -Verb runas -ArgumentList $args
})