J'ai un script que je voudrais exécuter en tâche de fond. Voici la commande que je voudrais exécuter:Impossible de démarrer scriptblock en tâche de fond ou à distance, fonctionne correctement en cours d'exécution
Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv
Si j'exécute cette commande, elle réussit sans problème.
J'ai essayé ce qui suit pour
Start-Job -ScriptBlock { Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv }
« Start-Job » Cela se traduit par « Get-Job » affichage comme terminée, quand il fait hasnt, ou ne marche pas semble avoir à en juger par le fichier manquant: 'Test_Source_Checksum.csv'
J'ai aussi essayé d'utiliser ce qui suit pour 'Invoke-Command'
Invoke-Command -AsJob -ComputerName ($env:COMPUTERNAME) -ScriptBlock { Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv }
Cela se traduit par 'Get-Job' l'affichage a échoué.
Si j'afficher l'échec en utilisant:
(get-job -name Job38).JobStateInfo.Reason
Je ne reçois rien ... retour
Suis-je utiliser Start-Job/Invoke-Command de manière incorrecte ici?
La raison pour laquelle je voudrais exécuter ce travail en arrière-plan est, im essayant de copier de grandes quantités de données et de checksum il (pour une migration DFS). Je voudrais copier les données dans les petits sous-ensembles, puis contrôle les données qui a été copié tandis que sa copie du lot suivant sur ... rincer et répéter
Merci,
Chris
EDIT: Voici une copie de l'ensemble du script:
##----------------------------------------------------------------------------------##
$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 }
Voyez-vous des erreurs affichées si vous essayez de recevoir les résultats du travail? 'Get-Job | Receive-Job' – boeprox
Oui je le fais, merci, il semble que WinRM n'était pas configuré, donc je ne pouvais pas lancer Invoke-Command. Ceci est maintenant résolu, mais maintenant, Invoke-Command et Start-Job sont les mêmes, comme dans, ils disent tous deux terminés mais n'ont pas exécuté le scriptblock (pas 'Test_Source_Checksum.csv') –
Quelle version de PowerShell utilisez-vous? Avez-vous essayé d'importer le module dans le scriptblock avant d'exécuter la commande Get-DfsrFileHash? – boeprox