我用 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/