如何在powershell中执行存储在变量中的ruby命令

我执行的形式 rake drive:unit_tests:load_data parameters here'. I get the error 的命令不被识别为cmdlet,函数,脚本文件或可操作程序的名称 . 检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试

我使用了 ps1 文件中的代码:

$dat1 = one ruby command | Out-String
# $dat1  will contain the value - rake drive:unit_tests:load_data
$dat2 = "  parameters here"
$dat3 = $dat1 + $dat2
& $dat3

资料来源:Executing a Command stored in a Variable from Powershell

回答(2)

2 years ago

看起来PowerShell不理解命令 rake ,这可能意味着它不在你的 PATH 中 .

跑:

Get-Command -CommandType Application | Where-Object { $_.Name -ilike 'rake.*' }

如果这个空白,那么powershell不知道在哪里找到rake . 您可以使用完全限定的路径名来调用它,也可以将rake的位置添加到 PATH 环境变量中 .

2 years ago

我终于找到了解决方案 . 帮助我的主要博客是here . 它在powershell中的概念"dynamic code" .

什么没有奏效:

$dat3 = {$dat1 + $dat2}
& $dat3

这只打印$ dat3的值,但实际上并不执行它 . 我进一步了解文章并尝试底部的代码 . 成功!!!

什么有效:

$dat3 = $dat1 + $dat2
$dat3 = $ExecutionContext.InvokeCommand.NewScriptBlock($dat3)
& $dat3

相关的powershell概念:命令行解析模式,表达式解析模式在这里阅读 - http://rkeithhill.wordpress.com/2007/11/24/effective-powershell-item-10-understanding-powershell-parsing-modes/