У меня есть этот сервис, который при получении запроса запускает команду powershell и возвращает результат. Вот код класса invoker:
public class PowerShellScript {
public PowerShellScript() {
}
public Object[] Invoke( String strScriptName, NameValueCollection nvcParams ) {
Boolean bResult = true;
int n = 0;
Object[] objResult = null;
PowerShell ps = PowerShell.Create();
String strScript = strScriptName;
for (n = 0; n < nvcParams.Count; n++) {
strScript += String.Format( " -{0} {1}", nvcParams.GetKey( n ), nvcParams[n] );
}
//ps.AddScript( @"E:\snapins\Init-profile.ps1" );
ps.AddScript( strScript );
Collection<PSObject> colpsOutput = ps.Invoke();
if (colpsOutput.Count > 0)
objResult = new Object[colpsOutput.Count];
n = 0;
foreach (PSObject psOutput in colpsOutput) {
if (psOutput != null) {
try {
objResult[n] = psOutput.BaseObject;
}
catch (Exception ex) {
//exception should be handeled properly in powershell script
}
}
n++;
}
colpsOutput.Clear();
ps.Dispose();
return objResult;
}
}
Метод Invoke возвращает все результаты, возвращаемые скриптом powershell. Проблема, однако, заключается в том, что если вызываемый сценарий содержит Write-Progress либо в импортированном модуле, либо в самом сценарии, класс Powershell почему-то полагает, что это реальный вывод, и мгновенно завершает выполнение сценария, возвращая в качестве объекта значение null.
В идеале можно блокировать вывод с помощью командлета Out-Null, но он не работает для Write-Progress. Есть идеи как заблокировать Write-Progress?