【问题标题】:Invoke multiple powershell commands from c# on the same scope在同一范围内从 c# 调用多个 powershell 命令
【发布时间】:2010-11-01 12:50:09
【问题描述】:

基本上我想做的是:

第 1 步)调用whatever.ps1(或脚本块),脚本类似于: $hello = "世界"

步骤 2) 调用 Get-Variable -name hello

步骤 3) 检索 Get-Variable 的输出

我不知道如何干净地做到这一点,因为每次我调用一个脚本块时都会创建一个不同的范围。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您有几个选择。如果可以的话,最简单的方法是更改​​脚本:

    $global:hello = "world"
    

    但是,使用全局变量通常是一种不好的做法。所以另一种方法是让您的脚本输出“Hello”,然后捕获管道调用的输出。只需将您的初始脚本更改为:

    "world"
    

    然后调用它并获取 pipeline.Invoke() 的输出并获取第一个对象。

    您还可以更改调用脚本的方式。将一个字符串传递给 CreatePipeline,如下所示:

    $hello = foo.ps1 
    

    然后检索变量 $hello 的内容。

    【讨论】:

      【解决方案2】:

      如果您仍然想要一个全局(其他答案涵盖此),则无需在主机应用程序中使用 Get-Variable

      创建一个运行空间并执行脚本。

      然后您可以从运行空间访问变量:

      value = myRunspace.SessionStateProxy.GetVariable("name");
      

      【讨论】:

      • 一个限制是 myRunspace.SessionStateProxy.GetVariable 目前不能在远程运行空间上工作,它会抛出 NewNotImplemented
      • Fastforward:不确定何时最终实现,但此命令在 Powershell 5 中有效
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2013-08-19
      • 2015-02-19
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多