psexec% 1 не является приложением Win32 - PullRequest
0 голосов
/ 04 сентября 2018

Это код, который я использую для запуска исполняемого файла, который находится на удаленном сервере. Я развернул консольное приложение со следующим кодом на своем веб-сервере, чтобы вызвать исполняемый файл, который находится на удаленном сервере. Но я получаю сообщение об ошибке «psexec% 1 не является допустимым приложением Win32». Я проверил этот код на моей локальной машине, он работает нормально ... но он не работает на сервере.

        ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools");
        info.FileName = @"C:\PsTools\psexec.exe";
        info.Arguments = @"\\" + "MyComputerName" + @" -h D:\Idealake\Schedulers\SBIHangFireConsole\bin\Debug\SBIHangFireConsole.exe";
        info.RedirectStandardOutput = true;
        info.UseShellExecute = false;
        Process p = Process.Start(info);

Сведения о сервере -

Версия ядра: Windows Server 2012 R2 Standard, многопроцессорный бесплатно Тип продукта: Стандартная версия Версия продукта: 6.3 Пакет обновления: 0 Номер сборки ядра: 9600 Зарегистрированная организация: Зарегистрированный владелец: пользователь Windows IE версия: 9.0000 Корень системы: C: \ Windows Процессоры: 4 Скорость процессора: 2,5 ГГц Тип процессора: AMD Opteron (tm) Процессор 6380 Физическая память: 2 МБ Видеодрайвер: VMware SVGA 3D

PsTools Версия в этом пакете: 2,45

1 Ответ

0 голосов
/ 05 сентября 2018
Install Power Shell in the Remote PC
Enable Power Shell Remoting to execute Powershell Commnads on the remote server by using the command "Enable-PSRemoting"
Add the server from which you are making the call as a Trusted one by using the command-
set-item wsman:\localhost\Client\TrustedHosts -value 172.16.0.0

ПРИМЕЧАНИЕ. Убедитесь, что вы выполняете вышеуказанные команды на обоих компьютерах

Now use the below code in your project to execute exe on remote server


  Runspace runspace = RunspaceFactory.CreateRunspace();
  runspace.Open();
  Pipeline pipeline = runspace.CreatePipeline();
  ps.Commands.AddScript("$User = \"domain\\username\"");
  ps.Commands.AddScript("$PWord = ConvertTo-SecureString -String \"yourpassword\" - 
  AsPlainText -Force");
  ps.Commands.AddScript("$Credential = New-Object -TypeName 
  System.Management.Automation.PSCredential -ArgumentList $User, $PWord");
  ps.Commands.AddScript("Invoke-Command -ComputerName REMOTECOMPUTERIP -ScriptBlock { 
  D:\\TestApp.exe } -cred $Credential");

  Collection<PSObject> resultst = ps.Invoke();
                Collection<ErrorRecord> errors = ps.Streams.Error.ReadAll();
                StringBuilder errorDetails = new StringBuilder();
                if (errors != null && errors.Count > 0)
                {
                    foreach (ErrorRecord er in errors)
                    {
                        errorDetails.AppendLine(er.Exception.ToString());

                    }
                    throw new Exception(errorDetails.ToString());
                }

                Console.WriteLine(errorDetails.ToString());
                StringBuilder stringBuilder = new StringBuilder();
                foreach (PSObject obj in resultst)
                {
                    stringBuilder.AppendLine(obj.ToString());
                }`enter code here`
                Console.WriteLine(stringBuilder.ToString());
                runspace.Close();
...