#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
}
}
Глупая ошибка заставила меня замолчать на несколько часов -.-
Но я рад, что нашел его. Спасибо