我正在嘗試使用 start-job 啟動一個功能。出于某種原因,我無法讓它作業,全域變數不會通過。我的問題是 - 如何將全域變數傳遞給函式,而不是在函式內部宣告它們而不是開始作業。函式示例:
$OutputDirectory=c:\test
$zipfile="c:\1.zip"
function 7zipextraction
{
Set-Alias 7zip $7zip_path
# Extracting files
$extract = 7zip x -y $zipfile -o"$OutputDirectory"
if ($LASTEXITCODE -ne 0)
{
write-host "7zip Error"
return
}
else
{
write-host "Files extracted successfully"
}
Start-Sleep -s 2
}
開始作業的例子:
Start-Job -ScriptBlock ${Function:7zipextraction} | Wait-Job | Receive-Job
uj5u.com熱心網友回復:
Start-Job將作業分派給一個單獨的子行程,這就是它無法訪問您在呼叫行程中定義的變數的原因。
引數化函式中的所有變數,然后將適當的引數顯式傳遞給Start-Job -ArgumentList:
function 7zipextraction
{
param(
[string]$ZipFile,
[string]$OutputDirectory,
[string]$7zipPath
)
Set-Alias 7zip $7zipPath -Force
# Extracting files
$extract = 7zip x -y $zipfile -o"$OutputDirectory"
if ($LASTEXITCODE -ne 0)
{
write-host "7zip Error"
return
}
else
{
write-host "Files extracted successfully"
}
Start-Sleep -s 2
}
Start-Job -ScriptBlock ${Function:7zipextraction} -ArgumentList "c:\1.zip","c:\test","c:\path\to\7zip\7z.exe" | Wait-Job | Receive-Job
uj5u.com熱心網友回復:
您可以使用using:修飾符訪問腳本塊之外的變數:
$OutputDirectory='c:\test'
$zipfile='c:\1.zip'
$7zippath = 'C:\path\to\7zip'
function 7zipextraction
{
Set-Alias 7zip $using:7zippath
# Extracting files
$extract = 7zip x -y $using:zipfile -o"${using:OutputDirectory}"
if ($LASTEXITCODE -ne 0)
{
write-host "7zip Error"
return
}
else
{
write-host "Files extracted successfully"
}
Start-Sleep -s 2
}
Start-Job -ScriptBlock ${Function:7zipextraction} | Receive-Job -Wait -AutoRemoveJob
using 適用于在遠程計算機或不同執行緒中執行的腳本塊:
- 呼叫命令
- 開始作業
- 開始執行緒作業
- ForEach-Object - 并行
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/414346.html
標籤:
