繁体   English   中英

如何为PowerShell提供C#RunSpace?

[英]How to provide C# RunSpace for PowerShell?

我正在尝试打印Powershell脚本的响应,该脚本向我显示了在远程主机上运行的服务。

Get-Service -ComputerName "ComputerName"

在Powershell上运行此命令时,将获得所需的输出。 但是,当我使用C#尝试相同操作时,出现以下异常。

没有运行空间可用于在此线程中运行脚本。 您可以在System.Management.Automation.Runspaces.Runspace类型的DefaultRunspace属性中提供一个。

我正在使用的代码是:

       var powerShell = PowerShell.Create().AddScript(script);

        var results = powerShell.Invoke();

        foreach (var item in results)
        {
            try
            {
                Console.WriteLine(item);
            }
            catch (ExtendedTypeSystemException e)
            {
                Console.WriteLine(e);
                break;
            }
        }

编辑:在PowerShell中输出

Status   Name               DisplayName
------   ----               -----------
Stopped  AdtAgent           Microsoft Monitoring Agent Audit Fo...
Stopped  AeLookupSvc        Application Experience
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Running  Appinfo            Application Information
Stopped  AppMgmt            Application Management
Stopped  AppReadiness       App Readiness
Stopped  AppXSvc            AppX Deployment Service (AppXSVC)
Stopped  AudioEndpointBu... Windows Audio Endpoint Builder
Stopped  Audiosrv           Windows Audio
Running  BFE                Base Filtering Engine
Running  BITS               Background Intelligent Transfer Ser...
Running  BrokerInfrastru... Background Tasks Infrastructure Ser...
Stopped  Browser            Computer Browser
Running  CcmExec            SMS Agent Host
Running  CertPropSvc        Certificate Propagation
Stopped  CmRcService        Configuration Manager Remote Control
Running  COMSysApp          COM+ System Application
Running  CryptSvc           Cryptographic Services
Running  DcomLaunch         DCOM Server Process Launcher
Stopped  defragsvc          Optimize drives

使用C#输出

System.Management.Automation.ExtendedTypeSystemException:检索字符串时发生以下异常:“ Exception”,调用“ ToString”,参数为“ 0”:“此线程中没有运行空间可用于运行脚本。 您可以在System.Management.Automation.Runspaces.Runspace类型的DefaultRunspace属性中提供一个。 您尝试调用的脚本块是:$ this.ServiceName“”“ --->

PowerShell版本为3。VisualStudio版本为2010 Ultimate

调用脚本属性时,我似乎遇到了类似的问题。 但是,要获取所需的最快数据,请尝试此操作。 修改命令(var脚本),然后在(thing.Members [%%%%%%]。Value)所在的位置放置要拉取或查看的PowerShell属性。 (如下所示)

class Program
{
    static void Main(string[] args)
    {
        var script = "Get-NetIPAddress ";

        var powerShell = PowerShell.Create().AddScript(script).Invoke();

        foreach (var thing in powerShell)
        {
            try
            {
                //the Members must be PROPERTIES of the PowerShell object
                var name = (thing.Members["InterfaceAlias"].Value);
                var ip= (thing.Members["IPv4Address"].Value);

                Console.WriteLine("Connection: " + name + " .......... IP: " + ip);
            }
            catch
            {

            }

        }

        Console.Read();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM