【问题标题】:Script a new powershell window with powershell?用powershell编写一个新的powershell窗口?
【发布时间】:2012-03-08 15:38:19
【问题描述】:

我想自动启动一个powershell并从另一个powershell运行一些命令(由于功能的优势,我想从另一个powershell启动它)。
我想这样做是因为我正在使用 powershell 测试用 C# 编码的 *.dll,并且我必须不断启动和退出 powershell,因为无法在 powershell 中卸载 dll,因此无法使用其重新加载库类。

有没有办法像办公室的 com-object 自动化一样自动化 powershell?

【问题讨论】:

标签: powershell automation


【解决方案1】:

只使用脚本或脚本块怎么样?

powershell {
   Add-Type foo.dll
   [Foo]::DoSomething();
}

应该可以。

如果你需要交互性并且需要随意尝试多个命令,你可以使用

powershell -noexit { Add-Type foo.dll }

在这种情况下,至少更改提示颜色会很有用,这样您就可以知道您是在测试子外壳中还是在父外壳中:

function Test-DLL {
  powershell -noexit {
    function prompt {
      Write-Host -n -fore yellow "Test $PWD>"
      ' '
    }

    Add-Type foo.dll
  }
}

我也倾向于用以下方式定义一个小函数:

"function $([char]4) { exit }" | Invoke-Expression

这让我可以使用 Ctrl+DEnter(与 Unix shell 类似的一半)关闭 PowerShell。

【讨论】:

  • 我确实使用 add-type。但是有两个问题:powershell锁定了库并且不能用[Reflection.Assembly]重新加载(我不知道这是否适用于add-type,因为当它被锁定时我无法重新编译dll)。
  • 对不起。我没有知道您正在运行 powershell 而不是名为 powershell 的函数;)它可以工作。即使从我可以轻松修改命令的 powershellISE 中。谢谢:)
  • 关键是你启动另一个shell来加载库并在你完成测试后关闭它。我的尝试是尽可能轻松地启动子shell(加载库)和可选的一些测试步骤。
【解决方案2】:

也许不是最优雅的解决方案,但应该这样做(我不是 PS 专业人士):

cmd /c start powershell

【讨论】:

  • 我知道这种方式,但我不能用这种方式将命令传递给新的 powershell 实例。
  • +1 传递命令对我来说是这样的: cmd /c start powershell.exe -nologo -noexit -command "cd c:\mydir" (我已经在上面更新了)
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2018-08-18
  • 2021-03-20
  • 2021-06-30
相关资源
最近更新 更多