我有一个脚本块我想作为后台工作运行。以下是我想要运行的命令:
Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv
如果我运行此命令,它会顺利通过,没有任何问题。
我已经尝试了以下“开始 - 工作”
Start-Job -ScriptBlock { Get-ChildItem -Recurse $source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv }
这导致了“Get-Job'显示为已完成,当它实际上没有,或者似乎没有被丢失的文件判断时:' 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'显示失败。
如果我使用以下方式显示故障:
(get-job -name Job38).JobStateInfo.Reason
我一无所获......
我在这里错误地使用了Start-Job / Invoke-Command吗?
我想将此作为后台作业运行的原因是,我试图复制大量数据和校验和(用于DFS迁移)。我想将数据复制到较小的子集中,然后校验复制的数据,同时复制下一批次...冲洗并重复
谢谢,
克里斯
编辑: 这是整个脚本的副本:
##----------------------------------------------------------------------------------##
$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 :(得分:0)
你如何通过$ source?因为除了编写变量名之外你什么都不做,它将为null,如果它为null,你将在远程系统上为$ pwd.Path执行Get-ChildItem。
最简单的解决方案是使$ source使用:来源。
Invoke-Command -AsJob -ComputerName ($env:COMPUTERNAME) -ScriptBlock { Get-ChildItem -Recurse $using:source | Get-DfsrFileHash | Export-csv -Append C:\Temp\Test_Source_Checksum.csv }
答案 1 :(得分:0)
除了上面的好信息之外,请记住,开始一项工作很像打开一个新的控制台(你无法直接看到),这意味着你可能需要重新连接或重新验证。例如,如果要启动使用PowerCLI的新作业,则必须重新连接到vCenter Server,因此在脚本块中,您将在命令前加上(connect-viserver ...):{{1 }}