Показать полную графическую версию : Запуск ps скрипта из bat скрита
Доброго времени суток.
Подскажите пожалуйста, как можно из bat файла, вызвать ps скрпит с повышенными привилегиями?
Вариант приведенный ниже, через runas не работает(
Если подскажите, как можно спрятать пароль, будет вообще замечательно.
@echo off
set message=%~2
set posh=%SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -command ". 'C:\Scripts\test.ps1'"
set pass=p@$$w0rd
if "%message%"=="test" (
echo %pass% | runas /user:domain\user %posh%
)
Foreigner
11-04-2016, 15:20
pogo, Пароль можно вводить только в интерактивном режиме. runas не принимает параметров в виде пароля, в том числе через пайп.
Foreigner,
Тогда это не подходит(( Интерактивный режим не подходит.
Есть ещё какие-то варианты?
Есть ещё какие-то варианты? »
Что мешает запускать пакетный файл с административными привилегиями (по ПКМ)?
Iska,
То что скрипт будет запускаться gsm модемом по смс.
Несколько вариантов:
1) Использовать psexec , где можно указать пароль и логин.
-u Specifies optional user name for login to remote
computer.
-p Specifies optional password for user name. If you omit this
you will be prompted to enter a hidden password.
-h If the target system is Vista or higher, has the process
run with the account's elevated token, if available.
2) Создать задачу в task scheduler и выполнить скрипт, лучший вариант
3) Пароль можно указать, но пользователю явно придеться нажать Да/Yes ,т.к. UAC не даст запустить, только отключение. Сохраняем скрипт и выполняем его, а из него будет уже вызваться основной:
$pass = ConvertTo-SecureString 'P@$$w0rd1' -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("domain\user", $pass)
$ScriptName = 'C:\Scripts\test.ps1'
$arg = "Start-Process powershell -Verb RunAs -ArgumentList '-ExecutionPolicy ByPass -File $ScriptName'"
Start-Process powershell -Credential $creds -ArgumentList $arg
Kazun,
Большое спасибо!
Тоже думал по поводу таска в планировщике, но почему то показалось что решение костыль, и есть лучше. Но что-то погуглив прихожу к мнению что это самый меньший костыль из имеющихся.
Дабы не разводить ещё тем, подскажите, в bat-скриптах, можно как-то скрыть пароль, аналогично posh? Когда пасс конвертируется в SecureString выгружается в файл и оттуда уже берется?
Вариант конечно тоже так себе по надежности, но хоть бы не в plaintext
pogo, никак. А зачем Вам там пароль? Вы же его введёте один раз «ручками» в Диспетчере задач.
Iska,
Там всё намного костыльнее получается( в батнике запускается ещё один exe с указание login\pass для другого доступа.
greg zakharov
11-04-2016, 18:34
Подскажите пожалуйста, как можно из bat файла, вызвать ps скрпит с повышенными привилегиями?
Эх, MVP'эшники, вечно все усложняют... pogo, сохраните код ниже как бат-файл и запустите.
<# :
@echo off
setlocal
set "self=%~f0" % rem : полный путь до командного сценария
2>nul powershell /noprofile /executionpolicy bypass^
"&{[ScriptBlock]::Create((gc '%self%') -join [Char]10).Invoke(@(&{$args}'%self%'))}"||(
echo:PowerShell has not been found.
)
endlocal
exit /b
#>
if (!(New-Object Security.Principal.WindowsPrincipal(
[Security.Principal.WindowsIdentity]::GetCurrent()
)).IsInRole(
[Security.Principal.WindowsBuiltInRole]::Administrator
)) {
$proc = New-Object Diagnostics.Process
$proc.StartInfo.FileName = $args[0]
$proc.StartInfo.LoadUserProfile = $false
$proc.StartInfo.Domain = [Environment]::UserDomainName
$proc.StartInfo.UserName = $(Read-Host 'Имя пользователя')
$proc.StartInfo.Password = $(Read-Host 'Пароль' -as)
$proc.StartInfo.UseShellExecute = $false
$proc.Start()
}
else {
Write-Host Здесь мог бы быть Ваш код -for green
Write-Host Нажмите любую клавишу для продолжения... -NoNewline
$host.UI.RawUI.ReadKey('NoEcho, IncludeKeyDown') | Out-Null
''
}
greg zakharov,
Спасибо! Но не могли бы вы чуток прокомментировать скрипт, увы познания bat у меня не велики... Что в итоге будет на выходе по выполнению скрипта?
greg zakharov
12-04-2016, 23:33
pogo, суть примера выше в следующем: обычный командный файл, запускающий себя как PowerShell сценарий; после того как управление будет передано PowerShell, проверяется наличие прав администратора, если таковых нет, предлагается ввести имя администратора и пароль, после чего командный файл снова перезапустит себя, но уже с правами администратора и исполнит блок кода else, то есть выведет надпись "здесь мог бы быть ваш код" и будет ожидать нажатия некоторой клавиши для завершения, - в сущности убивается два зайца разом: не нужно отдельно создавать сценарий PowerShell, а можно его сразу запиливать в бат, ну и решается проблема с повышением прав для запуска. Есть, конечно, некоторые нюансы, но они станут для Вас очевидны по мере работы с командными шеллами.
код ниже как бат-файл и запустите »
почему-то не отрабатывет, в чем может быть причина?
роверяется наличие прав администратора, если таковых нет, предлагается ввести имя администратора и пароль, после чего командный файл снова перезапустит себя, но уже с правами администратора и исполнит блок кода else, то есть выведет надпись "здесь мог бы быть ваш код" и будет ожидать нажатия некоторой клавиши для завершения »
ничего подобного не происходит((
emlen,
set "self=%~f0" % rem : полный путь до командного сценария
иногда в этом, если имя, файла, например: "10.10.2018 15'56'20.bat"
если так, попробуйте поменять имя на что-то понятное: "name.bat"
если не в этом причина, укажите точно что не отрабатывает - запуск bat не происходит или код внутри не так работает, как и где запускаете.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.