Как удаленно выполнить удаленный сценарий с повышенными правами в PowerShell


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

  • сервер (windows 2003 server)
  • serverB (windows 7)

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

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

Invoke-Command -computername serverA .remotedeploy.ps1

Содержание remotedeploy. ps1 таково:

cd D:Buildsbuild5
.Deploy.bat

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

  • выполнить удаленный powershell (это работает для меня)
  • выполнить локальный powershell с повышенным запросом (я могу это сделать)
Этот вопрос касается и того и другого одновременно. Поэтому точный вопрос таков:

Возможно, чтобы выполнить удаленный скрипт с повышенными правами в PowerShell?

2 7

2 ответа:

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

cd D:\Builds\build5
start-process CMD.EXE -verb runas -argumentlist "-C",".\Deploy.bat"

Если вы используете PowerShell 4, Вы можете выполнить команду, используя конфигурацию желаемого состояния, которая выполняется как 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
}