2016-12-16 68 views
0

我已經編寫腳本將一個文件(包含主機名)分成10個文件,對每個文件中的主機名執行ping(即powershell test-connection命令)。爲了加速這個過程,我使用了start-job命令來處理每個文件的主機名。如果我刪除了開始作業命令,那麼腳本可以根據需要正常工作。但是,當我使用start-job命令時,在「scriptblock」內使用的數組不會返回所需的輸出。相反,它仍然是空的。以下是部分腳本(僅適用於一個文件處理)。請指導,我在這裏錯過了什麼?Powershell,啓動作業不工作。沒有啓動腳本是好的

Start-Job -Name "Ping-Part-1" -ScriptBlock { 
    foreach ($Comp1 in $file_part1_content) { 
     If (test-Connection -ComputerName $Comp1 -Count 1 -Quiet) { 
       $project1 = Create-New-Object 
       $project1.AliveStatus = "Alive" 
       $project1.Hostname = $Comp1 
       $resultsarray_file1 += $project1 
      } 
      Else { 
       $project1 = Create-New-Object 
       $project1.AliveStatus = "Not Alive" 
       $project1.Hostname = $Comp1 
       $resultsarray_file1 += $project1 
      } 
     } 
    } 
+0

'Create-New-Object'?沒有這樣的東西 – 4c74356b41

+0

'Start-Job'通過創建帶有單獨變量的獨立'Runspace'的新進程(特別是'$ resultsarray_file1')。 – PetSerAl

+0

這是一個自定義編寫的函數 –

回答

0

夫婦的事情是不對的。默認情況下,您在作業中使用的變量在PowerShell會話中不可用(反之亦然)。所以你有很多問題。你沒有在工作中加入任何變數,你也沒有找到任何工作。

此外,您已將起始工作置於錯誤的地方。您現在正在開始1個工作,其中有整個foreach循環。我假設你想單獨處理每臺計算機。所以你應該在foreach循環中開始工作。

我前段時間寫了一篇關於這個帖子的博客文章,它適合你的場景。你可以找到它here

+0

在職-Name「平本部1「-Scr​​iptBlock {$ resultsarray_file1 = @() foreach($ Comp1 in $ file_part1_content){ If(test-Connection -ComputerName $ Comp1 -Count 1 -Quiet) {$ project1 = Create-New-Object $ project1 .AliveStatus =「Alive」 $ project1.Hostname = $ Comp1 $ resultsarray_file1 + = $ project1} Else {$ project1 = Create-New-Object $ proje ct1.AliveStatus = 「沒有生命」 $ project1.Hostname = $器Comp1 $ resultsarray_file1 + = $ PROJECT1}} 回報$ resultsarray_file1} –

+0

我沒有告訴你什麼,仍是 「啓動作業」 不返回任何東西 –

+0

Uhmm沒有不是真的。您仍然沒有將任何變量輸入到開始工作中。你可以使用-argumentlist來做到這一點。看看我在上面的帖子中發給你的鏈接。 http://sonnypuijk.nl/wp/powershell-jobs-for-multithreading/ –