Запуск сценария PowerShell на удаленной машине с помощью PSTool - PullRequest
2 голосов
/ 19 апреля 2011

Мне нужно запустить скрипт PS на удаленной машине, я делаю это, как показано в приведенном ниже коде.

Process psExecer = new Process
            {
                StartInfo =
                {
                    UseShellExecute = false,
                    CreateNoWindow = false,
                    WindowStyle = ProcessWindowStyle.Hidden,
                    FileName = @"c:\PsTools\PsExec.exe",
                    Arguments = @"c:\windows\System32\cmd.exe /k  c:\windows\System32\WindowsPowerShell\v1.0\powershell.exe E:\Scripts\SetUP.ps1 -u super -p Pass -s"        
                }
            };

            psExecer.Start();
            psExecer.WaitForExit();
            Thread.Sleep(5000);  

Проблема в том, что у скрипта есть некоторые командлеты sharepoint, и он должен загружать sharepoint PSSnapin.Скрипт работает правильно только при запуске в 64-битном образе Powershell.

Когда я пытался запустить с помощью PSTool, PSTool всегда заканчивал тем, что вызывал 32-битный PowerShell из папки% windir% \ SysWoW64, даже когда я явно упоминалпуть, как показано в коде.

Почему это так, каково решение моей проблемы

С уважением, Боже

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Когда 32-разрядное приложение ссылается на c: \ windows \ System32, оно перенаправляется на SysWoW64

Попробуйте использовать c: \ windows \ sysnative \ windowspowershell \ v1.0 \ powershell.exe

1 голос
/ 19 апреля 2011

Проблема, которую вы вызываете, является побочным эффектом виртуализации процесса из-за UAC.

Вот три решения:

1. Удалить UAC на целевом компьютере

2. WinRM

Если вы хотите удаленно запускать сценарии PowerShell для таких целей, как Windows 2008 R2 и Windows Seven, лучший способ - использовать WSMan, просто посмотрите about_Remote help In PowerShell.

3. попытаться удалить виртуализацию в процессе, который вы вызываете на удаленном компьютере

Чтобы предотвратить виртуализацию, добавьте манифест в тот же каталог, что и EXE-файл, для которого вы хотите удалить виртуализацию. Манифест - это файл XML с именем yourexename.exe.manifest. На этом сайте вы можете найти образец манифеста . Попробуйте установить requestedPrivileges на asInvoker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...