Запустите файл, расположенный в Program Files (x86), из PowerShell

#c# #powershell #path #script

Вопрос:

Я запускаю скрипт с C# : Код выглядит так :

 r.Open();
                using (PowerShell ps = PowerShell.Create().AddScript(_scriptPath))
                {
                    ps.Runspace = r;
                    ps.Invoke();
                    if (ps.HadErrors)
                    {
                        List<string> _items = new List<string>();
                        var errorMessage = new StringBuilder();
                        foreach (ErrorRecord err in ps.Streams.Error)
                        {
                            errorMessage.AppendLine(err.ToString());
                        }

                        _items.Add(errorMessage.ToString());
                    
                        foreach (var i in _items)
                        {
                            MessageBox.Show(i);
                        }
                    }                       
                }
 

В скрипте я пытаюсь запустить copy-item, для этого мне нужен путь :

Путь к сценарию выглядит так :

 $ScriptPath = Split-Path $Script:MyInvocation.MyCommand.Path 
 

С хостом записи я получил путь, выглядит так :

 C:Program Files (x86)somerandomFolderFile.ps1
 

С помощью Ps.потоков.Ошибка (в моем коде C#) я получаю следующее сообщение об ошибке.

Термин «x86» не был распознан как имя командлета, функции, файла сценария или исполняемой программы. программа. Проверьте правильность написания имени или правильность пути (если он указан), а затем повторите процедуру.

Как мне нужно написать свой код, чтобы Powershell понимал мой путь ?

Комментарии:

1. @vonPryz отредактировал мой пост с дополнительной информацией

2. @vonPryz обновит мой код

3. AddScript ожидает содержимое сценария, а не путь к сценарию.

4. $ScriptPath = "amp; '$ScriptPath'" ?

5. @iRon thy за ваш ответ. Я обнаружил, что ошибка возникает при вызове скрипта с C#. Сценарий в порядке, это просто Powershell, который не может найти путь » Program Files (x86)». Означает, что сценарий вообще не выполняется, потому что Powershell не может его найти.

Ответ №1:

Итак, я нашел решение, или, лучше, решение 🙂

Мой сценарий Powershell в порядке, ошибок нет. Но при запуске файла с пути, в котором есть пробелы, он нуждается в специальном формировании. Как написал @iRon.

Но не в скрипте, это нужно именно в коде C#, при вызове скрипта PS.

Мой Путь выглядел так :

 C:Program Files (x86)somerandomFolderFile.ps1
 

Но должен был выглядеть так, чтобы выполнить :

 amp; 'C:Program Files (x86)somerandomFolderFile.ps1'
 

Добавил «amp; ‘ Скрипт ‘» в код :

 private void executeScripts()
{
        string _dirPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string _sPath = Path.GetDirectoryName(_dirPath)   @"ExecuteScriptsDistributeFiles.ps1";
        string _scriptPath = "amp; '"   _sPath   "'";   //  <- This is where i added the Formation

        Trace.TraceWarning(_scriptPath);

        using (PowerShellProcessInstance pspi = new PowerShellProcessInstance())
        {
          //rest of the Code in my Post
        }        
}
 

Глупая ошибка заставила меня замолчать на несколько часов -.-

Но я рад, что нашел его. Спасибо