2016-08-02 9 views
0

バックグラウンドジョブとして実行したいスクリプトブロックがあります。以下は実行したいコマンドです:スクリプトブロックをバックグラウンドジョブまたはリモートジョブとして開始できません。直接細かく実行されます。

Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv 

このコマンドを実行すると、問題なく正常に実行されます。

私はそれが実際にhasnt、またはdoesntが不足しているファイルから判断しているように見えるとき、これは、完了として表示する「-ジョブ取得]が、その結果「開始-仕事」

Start-Job -ScriptBlock { Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv } 

ために次のことを試してみました: 'Test_Source_Checksum.csv'

は私も 'Invoke-Commandコマンド'

Invoke-Command -AsJob -ComputerName ($env:COMPUTERNAME) -ScriptBlock { Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv } 

ために、以下のものを使用して試してみましたこれは、 'ゲット・ジョブ' が失敗した表示になります。

私が使用して故障を表示する場合:

(get-job -name Job38).JobStateInfo.Reason 

を、私は戻って何を取得...私が間違ってここにスタート-仕事/ Invoke-Commandコマンドを

を使用していますか?

これをバックグラウンドジョブとして実行したいのは、大量のデータとチェックサムをコピーしようとしているからです(DFS移行の場合)。 :私は、チェックサムのが上の次のバッチをコピーしながら、コピーされたデータ...が

おかげで、

クリス

EDITをすすぎと繰り返し、小さなサブセット内のデータをコピーしたいですここにスクリプト全体のコピーがあります:

##----------------------------------------------------------------------------------## 
$source="E:\DFSR_Migration_Test_Prod" 
$dest="F:\DFSR_Migration_Test_Prod" 
$what = @("/COPYALL","/B","/SEC","/E","/xd","dfsrprivate") 
$options = @("/R:6","/tee","/MT:32") 
$cmdArgs = @("$source","$dest",$what,$options) 
##----------------------------------------------------------------------------------## 
robocopy @cmdArgs 
Write-Output "Prod_Copied @" (get-date) | Out-File C:\Temp\File_Copy.txt -Encoding ascii -Append -NoClobber 
Write-Output "Initiating Prod Source Checksum @" (get-date) | Out-File C:\Temp\File_Copy.txt -Encoding ascii -Append -NoClobber 
Start-Job -ScriptBlock { Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv C:\Temp\Prod_Source_Checksum.csv } 
Write-Output "Initiating Prod Destination Checksum @" (get-date) | Out-File C:\Temp\File_Copy.txt -Encoding ascii -Append -NoClobber 
Start-Job -ScriptBlock { Get-ChildItem -Recurse $dest | Get-DfsrFileHash | Export-csv C:\Temp\Prod_Destination_Checksum.csv } 
+0

ジョブの結果を受け取ろうとするとエラーが表示されますか? 'Get-Job | Receive-Job' – boeprox

+0

はい、ありがとうございます、WinRMはセットアップされていないので、Invoke-Commandを実行できませんでした。これは今解決されましたが、Invoke-CommandとStart-Jobの両方が同じで、両方とも完了したがスクリプトブロックを実行していません( 'Test_Source_Checksum.csv'なし) –

+0

実行しているPowerShellのバージョンは何ですか? Get-DfsrFileHashコマンドを実行する前にスクリプトブロック内でモジュールをインポートしようとしましたか? – boeprox

答えて

0

どのように$ sourceを渡していますか?なぜなら、変数名を書く以外に何もしていなければnullになり、nullの場合はリモートシステムで$ pwd.Pathに対してGet-ChildItemを実行するからです。

最も簡単な解決策は、$ sourceを$ using:Sourceにすることです。

Invoke-Command -AsJob -ComputerName ($env:COMPUTERNAME) -ScriptBlock { Get-ChildItem -Recurse $using:source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv } 
+0

$ sourceがスクリプトの先頭に指定されています。スクリプト –

+0

$ source:を使用してローカル変数を参照しない限り、スクリプトの先頭に宣言された$ sourceはInvoke-Command内で使用できません。あるいは、ArgumentList(および$ argsまたはparamブロックを宣言する)を使用して何かを渡します。-ComputerNameパラメータを使用していない場合は、うまくいきます。 –

+0

ああ!それはまさにそれです、クリス、あなたのご意見ありがとうございました! btw私は-Computernameなしで試してみましたが、失敗したので追加しましたが、これはWinRMが正しくセットアップされていないためだと思います....レッスンで学んだ:) Thanks again –

関連する問題