Как удаленно выполнить удаленный сценарий с повышенными правами в 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 ответа:
Вы пытаетесь изменить
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 }