Команды Powershell не работают в dotNet 3.1.401

Я пытаюсь выполнить команды powershell из экземпляра, созданного из SDK powershell, но, по-видимому, не все команды могут быть выполнены, это может быть моя ошибка, но только некоторые команды возвращают значение, как говорится в документации, это мой код:

  class ShellModel
{      
    private Runspace runspace;       
    private PowerShell invoker;

   public ShellModel()
    {               
        
        
    }

    public void executeCmd(string cmd)
    {

        using (runspace = RunspaceFactory.CreateRunspace())
        { 
            runspace.Open();                
            using (invoker = PowerShell.Create()) 
            {
                invoker.Runspace = runspace;
                invoker.Commands.AddScript("Get-WmiObject win32_service"/*+ " | Out-String"*/);
                var requestInvoker = invoker.Invoke("Set-ExecutionPolicy Unrestricted");
                System.Console.WriteLine(requestInvoker.Count);
                foreach (var request in requestInvoker)
                {
                    System.Console.Write("---> ");
                    System.Console.WriteLine(request);
                }                    
                
            }
            runspace.Close();
        }
        

    }

}

Следует отметить, что я использую эти библиотеки и таким же образом устанавливаю зависимости, которые Microsoft рекомендует для netcore.

using System.Management.Automation.Runspaces;
using System.Management.Automation;

пакет

<PackageReference Include="Microsoft.Management.Infrastructure.CimCmdlets" Version="7.0.3" />
<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.0.3" />

"Ошибка" заключается в том, что если я выполняю определенные команды PowerShell, у меня есть ответ, например "Get-Host", но при попытке выполнить другую команду, например "Get-WmiObject win32_service", я не получаю ответа, и я делаю даже не знаю, успешно ли выполняется команда, и я проверяю, что при попытке пройти через объект ответа "requestInvoker" и использовать метод "count" они оказываются пустыми, также бывает, что при выполнении определенных команд, например "Get -Host ", он возвращает объект, и я не могу пройти его с помощью цикла for, который у меня в настоящее время есть, и я могу показать результат только путем конкатенации"| Out-String"непосредственно с ситуацией команды powershell, которая с" Get -Команда "Мне не нужна.

Я пробовал другие способы выполнения команд, и в той же ситуации я не могу заставить их выполнить, и я даже получаю исключение, что команда не распознается, что-то, что не имеет для меня смысла, возможно, я ошибаюсь способ их использования, но во всех случаях исключение одно и то же.

У меня так работают некоторые команды:

invoker.Commands.AddScript("Get-WmiObject win32_service"/*+ " | Out-String"*/);

Это другие способы, которыми он не распознает команды и вызывает исключение.

//Way 1
invoker.Commands.AddCommand("Get-WmiObject").AddArgument("win32_service");
//Way 2
invoker.Commands.AddCommand("Get-WmiObject").AddParameter("win32_service"); 
//Way 3   
invoker.Commands.AddCommand("Get-WmiObject").AddParameter("-Class ").AddArgument("win32_service");

Исключение

System.Management.Automation.CommandNotFoundException: 'The term 'Get-WmiObject' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.'

Буду признателен за любую помощь или идеи, чтобы правильно выполнять команды

0 ответов

Другие вопросы по тегам