c# - 在 Powershell 中使用参数调用 Invoke-Expression

标签 c# powershell command-line-arguments

我用 c# 编写了一个 powershell 模块,它有一堆 cmdlet,比如

添加虚拟机

cmdlet 连接到 API 并拉回数据。

但为了与产品的 ssh CLI 保持一致,我编写了一个名为 newtask 的函数,它接受“addvm”作为参数和 $args。

例如

newtask addvm -id 12345

然后我调用 Add-VM 并像这样将 $args 作为字符串传递

Invoke-Expression Add-VM $argstr

问题是 Add-VM 抛出一个错误,它找不到接受参数 System.Object[] 的位置参数

A positional parameter cannot be found that accepts argument 'System.Object[]'

虽然我可以轻松地将“addvm”别名为“Add-VM”,但我正在努力保持与 ssh CLI 的一致性,以便新用户可以快速开始使用此模块。

我认为发送像“-id 12345”这样的字符串就足够了,但事实并非如此。 pscmdlet 是否期望接收其他内容?

提前致谢。

最佳答案

我知道这现在有点老了,但我遇到了类似的问题,一位同事告诉我转义 $argstr 会阻止对象转换为字符串。

Invoke-Expression "Add-VM `$argstr"

关于c# - 在 Powershell 中使用参数调用 Invoke-Expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615658/

相关文章:

powershell - 如何使用PowerShell更新SharePoint日历?

excel - 如何使用 PowerShell 保存只读文件

bash - 如何拦截和删除 bash 中的命令行参数

python - 将星号作为命令行参数中字符串的一部分传递到 python 程序中?

c - 将参数解析为数组

c# - 迁移到 Windows 7 - 这将如何影响我的软件?

c# - 一种让 boolean 值代表 1 和 -1 的优雅方式

powershell - 为所有用户持久安装 PowerShell 模块

c# - 如何使用 Roslyn 将 XML 注释添加到 MethodDeclarationSyntax 节点?

c# - 如何去除不太集中的像素并留下最密集的部分