我试图获得一个在作业内部使用函数的简单工作示例。我已经设法将我的函数传递给用于我的工作的脚本块,但我似乎无法获取该函数的参数。Powershell:将参数传递给存储在变量中的函数
# concurrency
$Logx =
{
param(
[parameter(ValueFromPipeline=$true)]
$msg
)
Write-Host ("OUT:"+$msg)
}
# Execution starts here
cls
$colors = @("red","blue","green")
$colors | %{
$scriptBlock =
{
Invoke-Expression -Command $args[1]
Start-Sleep 3
}
Write-Host "Processing: " $_
Start-Job -scriptblock $scriptBlock -args $_, $Logx
}
Get-Job
while(Get-Job -State "Running")
{
write-host "Running..."
Start-Sleep 2
}
# Output
Get-Job | Receive-Job
# Cleanup jobs
Remove-Job *
下面是输出:
Processing: red
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
175 Job175 Running True localhost ...
Processing: blue
177 Job177 Running True localhost ...
Processing: green
179 Job179 Running True localhost ...
179 Job179 Running True localhost ...
177 Job177 Running True localhost ...
175 Job175 Running True localhost ...
Running...
Running...
OUT:
OUT:
OUT:
那么就证明OUT:X3在输出我的函数获取调用,但我还没有发现任何语法这使我可以获取该函数的参数。思考?
编辑:
注意,在肖恩的观察之下,我的回应,我尝试使用功能变量,因为使用传统的功能似乎并没有工作。如果有一种方法可以实现这一点,我将非常乐意不必将我的函数作为变量传递。
这似乎并没有工作,这就是为什么我会通过把我的函数变成一个变量的麻烦。当我将Logx作为一个传统函数并尝试用Logx $ args [0]代替调用表达式调用它时,我得到: 术语'Logx'不被识别为cmdlet,函数,脚本文件的名称,或者能够运行的程序。检查名称的拼写,或者如果包含路径,请验证 路径是否正确,然后重试。 – 2012-08-04 01:29:18
根据我的理解,Start-Job启动另一个没有引用父实例中定义的函数的powershell实例。这是我试图解决的问题。 – 2012-08-04 02:01:23