2015-01-15 4 views
0

У меня есть сценарий powershell и файл bat, который его запускает. Я хочу, чтобы файл bat начал открывать PowerShell, а затем активировал новую оболочку с повышенными привилегиями, а затем запускал две команды. Первая команда - это каталог изменений, вторая команда запускает скрипт powershell.Запуск оболочки администратора, выполняющей несколько команд

До сих пор у меня есть это:

powershell -NoProfile -ExecutionPolicy ByPass -Command "& {Start-Process PowerShell -Verb RunAs -ArgumentList '-NoExit -NoProfile -ExecutionPolicy Bypass cd %~dp0 .\App\Deploy-Application.ps1}'" 

Это раздел У меня возникли проблемы с:

cd %~dp0 .\App\Deploy-Application.ps1 

Я хочу, чтобы запустить эти две команды, но я не знаю, как. Он выполняет одну команду. Я попытался добавить точку с запятой между командами, но она не сработала.

ответ

1

сделал быстрый тест, и это то, что я получил работает:

файл Test.bat

cd %~dp0 
powershell -NoProfile -Command ".\test.ps1" 

Test.ps1

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 
{ 
    $arguments = "-noprofile & '" + $myinvocation.mycommand.definition + "'" 
    Start-Process powershell -Verb runAs -ArgumentList $arguments 
    Break 
} 

Write-Host "Rawr" 

Pause 

Если я запустить пакетный файл, он открывает сценарий powershell, который затем проверяет, выполняется ли текущее окно в качестве администратора, а если нет, снова открывает скрипт в качестве администратора.

После этого он отображает Rawr на моем экране.

В вашем случае вместо Write-Host можно поставить

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 
{ 
    $arguments = "-noprofile & '" + $myinvocation.mycommand.definition + "'" 
    Start-Process powershell -Verb runAs -ArgumentList $arguments 
    Break 
} 

cd <Your directory to change to here> 
<run command here> 

Pause 
+0

Это выглядит намного лучше, чем мое решение. Собираюсь попробовать это завтра. – ConditionRacer

Смежные вопросы