Вопрос по – Как удаленно выполнить ELEVATED удаленный скрипт в PowerShell

7

У меня есть два сервера:

serverA (windows 2003 server) serverB (windows 7)

ServerA содержит папку с командным файлом (deploy.bat), которую необходимо выполнить из командной строки с повышенными привилегиями. ВServerA, если я запускаю его из обычного приглашения или подсказки PowerShell, это не удается. Если я запускаю его из привилегированного приглашения, он работает. (запустить от имени администратора).

У меня проблема, когда я пытаюсь выполнить командный файл изserverB используя удаленное выполнение powershell. Я могу выполнить с этой командой:

Invoke-Command -computername serverA .\remotedeploy.ps1

Содержаниеremotedeploy.ps1 является:

cd D:\Builds\build5
.\Deploy.bat

Я посмотрел много вопросов в stackoverflow о:

Execute a remote powershell (This works for me) Execute a local powershell with elevated prompt (I can do it)

Этот вопрос об обоих одновременно. Итак, точный вопрос:

Is possible to execute an ELEVATED REMOTE script in PowerShell?

Ваш Ответ

2   ответа
1

Вы пытаетесь изменитьremoteDeploy.ps1 запустить CMD.EXE с повышенными правами:

cd D:\Builds\build5
start-process CMD.EXE -verb runas -argumentlist "-C",".\Deploy.bat"
Это не работает. Когда он выполняется локально, запрос формы Windows запрашивает у меня разрешение, а когда я удаленно выполняю его, он зависает из-за того же приглашения формы окна, которое я предполагаю. Oscar Foley
Что вы используете в deploy.bat, что необходимо повысить. Программа не должна использовать пользовательский интерфейс.
Я думаю, что попробовал это, но попросил у меня пароль (не вариант, так как мне нужно, чтобы он запускался в сценарии сборки), и кажется, что нет возможности ввести пароль. Я попробую еще раз сейчас, чтобы быть уверенным. Oscar Foley
Кажется, это работает от меня, но я использую настоящие учетные данные администратора, когда я создаю свою PSSession.
Я использую инструмент SQLCompare. Мне удалось перестать нуждаться в повышенных разрешениях. Отображаемый пользовательский интерфейс - это «runas» Пользователь запрашивает подтверждение, хочу ли я запускать процесс с повышенными правами доступа. Oscar Foley
2

Если вы используете PowerShell 4, вы можете выполнить команду с помощью Desired State Configuration, которая запускается какSYSTEM:

Invoke-Command -ComputerName ServerA -ScriptBlock {
    configuration DeployBat
    {
        # DSC throws weird errors when run in strict mode. Make sure it is turned off.
        Set-StrictMode -Off

        # We have to specify what computers/nodes to run on.
        Node localhost 
        {
            Script 'Deploy.bat'
            {
                # Code you want to run goes in this script block
                SetScript = {
                    Set-Location 'D:\Builds\build5'
                    # DSC doesn't show STDOUT, so pipe it to the verbose stream
                    .\Deploy.bat | Write-Verbose
                }

                # Return $false otherwise SetScript block won't run.
                TestScript = { return $false }

                # This must returns a hashtable with a 'Result' key/value.
                GetScript = { return @{ 'Result' = 'RUN' } }
            }
        }
    }

    # Create the configuration .mof files to run, which are output to
    # 'DeployBot\NODE_NAME.mof' directory/files in the current directory. The default 
    # directory when remoting is C:\Users\USERNAME\Documents.
    DeployBat

    # Run the configuration we just created. They are run against each NODE. Using the 
    # -Verbose switch because DSC doesn't show STDOUT so our resources pipes it to the 
    # verbose stream.
    Start-DscConfiguration -Wait -Path .\DeployBat -Verbose
}

Похожие вопросы