我試圖獲得一個在作業內部使用函數的簡單工作示例。我已經設法將我的函數傳遞給用於我的工作的腳本塊,但我似乎無法獲取該函數的參數。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