#c# #powershell
#c# #powershell
Вопрос:
Действительно борюсь с этим. Я пробовал разные способы, но, похоже, ничего не работает.
-используя addScript: я получаю сообщение об ошибке, сообщающее мне, что я не могу вызывать параметры таким образом, и должен ли использовать пользовательский интерфейс, подобный ISE ?!
-используя параметр FilePath, я не могу найти правильный способ передачи аргументов (проблема с привязкой)
Это последняя версия, которую я пробовал, и она не вызывает ошибок, но сценарий не выполняется, ничего не происходит…
Помощь была бы очень признательна.
runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
pipeline = runspace.CreatePipeline();
string script =
@"{param($merchantName, $appType, $gruntDirectory, $merchantInstanceDirectory, $editorConnectionString) "
_config.MerchantInstance.Directory @"Generate_And_Compile_LESS.ps1"
" –merchantName $merchantName"
" –appType $appType"
" –gruntDirectory $gruntDirectory"
" -merchantInstanceDirectory $merchantInstanceDirectory"
" -editorConnectionString $editorConnectionString }";
Command compileCommand = new Command("Invoke-Command");
compileCommand.Parameters.Add("Scriptblock", ScriptBlock.Create(script));
var args = new List<string>();
args.Add(merchantName);
args.Add(appType.GetHashCode().ToString());
args.Add("'" _config.Grunt.Directory "'");
args.Add("'" _config.MerchantInstance.Directory "'");
args.Add("'" _connectionStrings.AppConnectionString "'");
compileCommand.Parameters.Add("ArgumentList", String.Join(",", args));
pipeline.Commands.Add(compileCommand);
Collection<PSObject> results = pipeline.Invoke();
Ответ №1:
Вы можете использовать этот код, который я лично только что протестировал.
static void Main(string[] args)
{
PowerShell ps = PowerShell.Create();
ps.AddScript(@"c:testtest.ps1").AddParameter("param1", "paramvalue1");
ps.Invoke();
}
Вот мой тестовый скрипт, расположенный в c:testtest.ps1
.
[CmdletBinding()]
param (
[string] $param1
)
Set-Content -Path $PSScriptRoottest.txt -Value $param1;
К вашему СВЕДЕНИЮ, убедитесь, что вы запускаете 32-разрядную версию (x86) PowerShell, и установите политику выполнения неограниченной. Visual Studio является 32-разрядным процессом и по умолчанию вызывает 32-разрядный движок PowerShell.
Комментарии:
1. Забыл упомянуть, я хочу использовать объект pipeline, чтобы я мог перехватывать конкретные ошибки, которые выдаются внутри скрипта.
2. ps = ps.AddScript(…).AddParameter(….) работал лучше для меня