C# если сценарий powershell завершает показ сообщения - PullRequest
1 голос
/ 06 апреля 2020

Если сценарий завершен, я хочу всплывающее окно сообщения, но я не знаю оператор if.

    using (PowerShell PowerShellInstance = PowerShell.Create())
    {
        PowerShellInstance.AddScript("cmdkey /list | ForEach-Object{if($_ -like \"*Target:*\"){cmdkey /del:($_ -replace \" \",\"\" -replace \"Target:\",\"\")}}");
        PowerShellInstance.Invoke();
        if ()
        {
            MessageBox.Show("the process was successfully completed");
        }

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Как указал ADyson, вызов PowerShellInstance.Invoke(); является синхронным.

Однако, если вы хотите узнать, была ли команда успешной или нет, вы можете использовать HadErrors и при необходимости прочитайте поток ошибок:

if (!PowerShellInstance.HadErrors)
{
    MessageBox.Show("the process was successfully completed");
}
else
{
    string[] errors = PowerShellInstance.Streams.Error.Select(x => x.ToString()).ToArray();
    // Show error to user or log them...
}
0 голосов
/ 06 апреля 2020

PowerShellInstance.Invoke(); синхронно, поэтому ваш скрипт уже будет ждать завершения Powershell. Вам не нужно заявление if.

Если вы действительно хотите асинхронное выполнение, вы можете вызвать скрипт другим способом, используя BeginInvoke(). См. https://docs.microsoft.com/en-gb/archive/blogs/kebab/executing-powershell-scripts-from-c - объясняются как синхронный, так и асинхронный подходы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...