首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将参数绑定到实参“”command“”,因为它为空。“”Powershell

无法将参数绑定到实参“”command“”,因为它为空。“”Powershell
EN

Stack Overflow用户
提问于 2017-07-28 01:34:38
回答 4查看 10.4K关注 0票数 2

我有一个类似于下面代码的函数。它接收命令和命令参数。我必须在后台运行此命令并收集输出。但是最后一句话让我犯了这个错误

错误:

代码语言:javascript
复制
Cannot bind argument to parameter 'Command' because it is null.
+ CategoryInfo          : InvalidData: (:) [Invoke-Expression], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.InvokeExpre
ssionCommand
+ PSComputerName        : localhost

代码:

代码语言:javascript
复制
$cmd = 'Get-content'
$Arg = 'path to file'
$sb = "$cmd $Arg -ErrorVariable e -ErrorAction Stop"
invoke-Expression $sb #This printsoutput
$job = Start-job -ScriptBlock {Invoke-Expression $sb}
wait-job -id $job.Id
$job | Receive-job #this should print output but throwing error

我非常确定最后一行就是抛出错误的那一行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-28 02:17:04

这里的问题是您实际上没有给Invoke-Expression一个命令。

每当您创建新的上下文(在本例中为作业)时,您就失去了对父会话环境的访问权限。在您的例子中,$sb当前为空。

管理这种情况的方法是通过Start-Job-ArgumentList参数将值作为参数传递

代码语言:javascript
复制
start-job -ScriptBlock {} -ArgumentList

为了便于将$sb传递给ScriptBlock,您可以这样做:

代码语言:javascript
复制
$sb = "$cmd $Arg -ErrorVariable e -ErrorAction Stop"
$job = start-job -ScriptBlock { Param([string]$sb)
    Invoke-Expression $sb
} -ArgumentList $sb

这可能会让人感到困惑,所以这是用更友好的名称编写的相同代码:

代码语言:javascript
复制
$OuterSB = "$cmd $Arg -ErrorVariable e -ErrorAction Stop"
$job = start-job -ScriptBlock { Param([string]$InnerSB)
    Invoke-Expression $InnerSB
} -ArgumentList $OuterSB
票数 4
EN

Stack Overflow用户

发布于 2017-07-28 03:35:46

除了-argumentlist之外,将$sb放入scriptblock作用域的另一种方法是使用$using:作用域。(PowerShell 3+)

代码语言:javascript
复制
$cmd = 'Get-content'
$Arg = 'path to file'
$sb = "$cmd $Arg -ErrorVariable e -ErrorAction Stop"
$job = Start-job -ScriptBlock {Invoke-Expression $using:sb}
wait-job -id $job.Id
$job | Receive-job
票数 6
EN

Stack Overflow用户

发布于 2019-11-25 14:54:55

我得到了相同的错误,但是当我使用管理员权限运行PowerShell时,我没有得到这个错误。祝你好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45357491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档