微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell命令在dotNet 3.1.401

如何解决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”,它将返回一个对象,而我无法通过当前存在的每个循环使用它,并且只能通过将“ | Out-String”直接连接到powershell命令的情况来显示结果不需要“ Get-Command”。

我尝试了其他方法来执行命令,在相同的情况下,我无法使其执行,甚至出现异常,该命令无法识别,这对我来说没有意义,也许我在使用它们的方式上是错误的,但是在所有方面,例外都是相同的。

这是一些命令对我起作用的方式:

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.'

我将不胜感激能正确执行命令的任何帮助或想法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?