2016-08-02 1 views
0

У меня есть скриптовый блок, который я хотел бы запустить как фоновое задание. Ниже приведена команда, которую я хотел бы запустить:Невозможно запустить scriptblock как фоновое или удаленное задание, работает отлично, выполняя непосредственно

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

Если я запустил эту команду, она успешно проходит без проблем.

Я попытался следующим за «Start-Job»

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

Это приводит к «Get-Job» отображая завершенные, когда он на самом деле hasnt, или оленья кожа, как представляется, судя по отсутствующему файлу: '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). Я хотел бы, чтобы скопировать данные в небольших подмножеств, то контрольная сумма данных, которые были скопированы во время его копирования следующей партии над ... прополоскать и повторить

Спасибо,

Chris

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 те же, что и в, оба говорят, что завершены, но не выполнили скриптблока (no 'Test_Source_Checksum.csv) –

+0

Какая версия PowerShell вы используете? Вы пытались импортировать модуль в скриптблоке до запуска команды Get-DfsrFileHash? – boeprox

ответ

0

Как вы передаете $ source? Потому что, если вы ничего не делаете, кроме как писать имя переменной, оно будет null, а если оно равно null, вы будете выполнять Get-ChildItem для $ pwd.Path в удаленной системе.

Самое простое решение - сделать $ 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

$ источник, объявленный в начале скрипта, не будет доступен внутри Invoke-Command, если вы не используете $ using: для ссылки на локальную переменную. Альтернативно передайте что-то в использовании ArgumentList (и либо $ args, либо объявите блок param).Если бы вы не использовали параметр -ComputerName, это было бы просто отлично. –

+0

Aha! Это точно, Крис, спасибо вам за ваш вклад! Кстати, я попробовал без -Computername, но добавил его, поскольку он терпел неудачу, но я предполагаю, что это произошло из-за неправильной настройки WinRM. Урок извлечен :) Еще раз спасибо –

Смежные вопросы