2014-09-02 3 views
0

У меня есть командный файл, который запускает скрипт powershell script_1, который вызывает еще один скрипт powershell script_2 с повышенными учетными данными.Psexec запускает командный файл без ошибок, но не имеет эффекта

Когда я вхожу в remote_server (Win Server 2012 R2, в WORKGROUP) и выполняю этот пакетный скрипт, он отлично работает.

Когда я вхожу в host_server (Win Server 2012 R2, в WORKGROUP) и выполняю этот пакетный скрипт с помощью psexec, он возвращается с кодом ошибки 0, но когда я проверяю, работает ли это, это похоже на сценарий powershell script_1 или script_2 никогда не выполнится

на host_server, я буду запускать CMD Shell, Shift-правой кнопкой мыши и выберите «Запуск от имени другого пользователя»

enter image description here

Тогда для пользователя я типа в «Администратор», а затем пароль.

Затем я выполнить следующее

D:\pstools\psexec.exe \\IP_of_remote_server -u username -p password -accepteula C:\share\enable.bat 

И он выполняет без ошибок, и возвращает код 0

enable.bat

@echo off 
powershell.exe C:\share\eLEVATE.ps1 

eLEVATE.ps1

$startInfo = $NULL 
$process = $NULL 


<#Previously created password file in C:\share\cred.txt, read-host -assecurestring | convertfrom-securestring | out-file C:\share\cred.txt#> 
$password = get-content C:\share\cred.txt | convertto-securestring 

$startInfo = New-Object System.Diagnostics.ProcessStartInfo 
$startInfo.FileName = "powershell.exe" 
$startInfo.Arguments = "-noninteractive -windowstyle hidden -noprofile C:\share\remote_elevate.ps1 " 

$startInfo.RedirectStandardOutput = $true 
$startInfo.UseShellExecute = $false 
$startInfo.CreateNoWindow = $false 
$startInfo.Username = "Administrator" 
$startInfo.Domain = "WORKGROUP" 
$startInfo.Password = $password 

$process = New-Object System.Diagnostics.Process 
$process.StartInfo = $startInfo 
$process.Start() | Out-Null 
$userId = $process.StandardOutput.ReadToEnd() 
$process.WaitForExit() 

remote_elevate.ps1

enable-psremoting -force 

Я пытался понять это все утро. Благодаря!

EDIT

Я отправляю точный скриншот ошибки я получаю, когда я вхожу

d:\pstools\psexec.exe \\remote_IP -u Administrator -p password -accepteula cmd

Затем выполнить

powershell.exe -executionpolicy bypass c:\share\eLEVATE.ps1

enter image description here

+0

Что такое набор функций PowerShell 'ExecutionPolicy'? – aphoria

+0

@aphoria - это 'RemoteSigned' – Glowie

+0

Вы пробовали запустить CMD.exe с помощью PSExec и посмотреть, что он говорит, когда вы пытаетесь запустить ваш' powershell.exe C: \ share \ eLEVATE.ps1' таким образом? Возможно, вам нужно 'powershell.exe -executionpolicy обходить C: \ share \ eLEVATE.ps1', чтобы обойти любую политику выполнения, которая блокирует. – TheMadTechnician

ответ

1

Я пишу это как ответ, так как комментарии не передают то, что необходимо для ограниченного форматирования.

В системе Host_server вызовите командную строку, как описано.

Введите следующую команду:

d:\pstools\psexec.exe \\remote_IP -u username -p password -accepteula cmd 

На экране должно появиться следующее (Windows версия будет отличаться, так как я побежал это на Windows 7 Enterprise, и вы будете делать это на сервере 2012):

PsExec v1.98 - Execute processes remotely 
Copyright (C) 2001-2010 Mark Russinovich 
Sysinternals - www.sysinternals.com 


Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\Windows\system32> 

Это теперь командная строка на Remote_server. Все, что выполняется из этого приглашения, не будет происходить локально (host_server), но произойдет на компьютере удаленного_сервера. В этот запрос введите команду:

powershell.exe -executionpolicy bypass c:\share\eLEVATE.ps1 

Выполняет ли это без ошибок? Делает ли он то, что он должен?

После того, как вы закончите тестирование и готовы закрыть окно командной строки на системе remote_server использовать команду:

exit 

Это будет закрыть командную строку удаленного и возвратит вас в командной строке на локальный компьютер (host_server).

PSExec укажет код возврата 0, так как CMD.exe закрыт нормально. Это не отражает ничего, что вернет PowerShell, только тот cmd.exe в удаленной системе будет выполнен и закрыт нормально.

+0

Я выполнил следующие шаги на host_server. Когда я выполняю powershell.exe ... ошибок нет. Когда я набираю exit и вхожу, он говорит 'cmd, выходящий на remote_server с кодом ошибки 0.' Однако PSRemoting все еще отключен на remote_server – Glowie

+1

. Тогда пользователь, который вы используете для выполнения PSExec администратора на компьютере Remote_Server? – TheMadTechnician

+0

имя пользователя имеет права администратора как на host_server, так и на remote_server. Администратор имеет одинаковый пароль как на host_server, так и на remote_server. Однако, когда я был на host_server и выполнял 'psexec.exe \\ remote_IP -u Administrator -p password -accepteula cmd', а затем выполнил 'powershell.exe -executionpolicy обход c: \ share \ eLEVATE.ps1', у меня появилось несколько ошибок, то есть' convertto-securestring: ключ недействителен для использования в указанном состоянии. 'и' Exception calls "Start" с аргументами «0»: «Имя пользователя или пароль неверны» '... но зашифрованный файл паролей является паролем администратора. – Glowie

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