Команды 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.'
Буду признателен за любую помощь или идеи, чтобы правильно выполнять команды