В названии говорится, что у меня есть начальная работа с блоком сценария, который вместо выполнения команд выводит информацию о задании.Powershell Start-Job не исполняет scriptblock
Порядок, в котором это запускается на выполнение заключается в следующем
$location = $(Get-Location).toString()
$oldModulePath = $env:PSModulePath
$env:PSModulePath = $env:PSModulePath + ";" + $location + "\LongitudePowershellModules"
$env:PSModulePath
$configXML = [xml](Get-Content $location"\InstallationConfig.XML")
$config = $configXML.root
Import-Module CreateComponentsFolder -PassThru
Import-Module CreateTransferFolder -PassThru
Import-Module ConfigureDB -PassThru
Import-Module FastProxyTools -PassThru
Import-Module WspTools -PassThru
Import-Module CopySharepointPowershellXML -PassThru
Import-Module SearchCenterTools -PassThru
Import-Module ConfigureFAST -PassThru
# 1 - CreateComponentsFolder
CreateLongitudeComponentsFolder -currentLocation $location
И модуль с запуском задания
function CreateLongitudeComponentsFolder
{
Param(
[Parameter(Mandatory=$True, Position=1)]
[string]$currentLocation
)
$scriptBlock = {Write-Host "Copying files to '"C:\Program Files\Ba-insight\Longitude Fast Component"'"`
Copy-Item $currentLocation"\Longitude Fast Component" "C:\Program Files\Ba-insight\Longitude Fast Component" -recurs`
}
Start-Job -ScriptBlock $scriptBlock -ArgumentList $currentLocation -Name "CopyingFiles"
$scriptBlock = {$fileAndFolderList = Get-ChildItem $currentLocation"\Longitude Fast Component" -recurs
$targetLocationFileAndFolderList = Get-ChildItem "C:\Program Files\Ba-insight\Longitude Fast Component" -recurs
$timer = new-object System.Timers.Timer
$timer.Interval = 500 #0.5 sec
$timer.AutoReset = $true
$itemsPresent = $fileAndFolderList | Measure-Object
$action = {foreach($item in $fileAndFolderList)`
{`
if($itemsPresent -ne 0)`
{`
if($targetLocationFileAndFolderList.IndexOf($item) -ne -1)`
{`
$itemsPresent = $itemsPresent - 1`
}`
else`
{`
$itemsPresent = $fileAndFolderList | Measure-Object`
}`
}`
else`
{`
$timer.stop()`
}`
}`
}
Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action $action | Out-Null
$timer.Enabled = $true
}
Start-Job -ScriptBlock $scriptBlock -ArgumentList $currentLocation -Name "CheckingFiles"
Wait-Job -Name "CheckingFiles"
Write-Host "All files have been copied."
}
Я не получаю никаких ошибок, но вместо выполнения команд оно пишет для обоих стартовых работ следующее:
HasMoreData : True
StatusMessage :
Location : localhost
Command : Write-Host "Copying files to '"C:\Program Files\Ba-insight\Longitude Fast Component"'"`
Copy-Item $currentLocation"\Longitude Fast Component" "C:\Program Files\Ba-insight\Longitud
e Fast Component" -recurs`
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : 70ab6414-0ca4-467e-b283-20057e4141ad
Id : 1
Name : CopyingFiles
ChildJobs : {Job2}
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
State : Running
Возможно, это связано с тем, как Я написал блоки скриптов, но я не могу понять, что отличается от всех других примеров, которые я видел.
Также возможно, чтобы начальная работа ожидала ввода пользователя с помощью команды read-host?
EDIT: Я нашел проблему с тем, почему работа не выполнялась. Параметр не передавался правильно. Вот ссылка, где я нашел решение.
Passing parameters to start-job
Последний пример работает, и вы должны сделать это так, что даже для одного параметра.
У меня все еще есть один вопрос. Материал, который я написал выше, по-прежнему выводится на консоль. Есть ли способ подавить нежелательный вывод из командлета start-job?
просто попытался его с теми же результатами. Я решил, что мне, вероятно, нужно будет добавить параметр, но я подумал, что если бы это была проблема, я бы получил ошибку с нулевым параметром. все еще не могу понять, почему он выводит команды как строки вместо их выполнения. – user1752736
Просто заметив символ продолжения строки после записи-хоста, в блоке скрипта вы можете просто использовать линейные фиды с запятой для следующей команды. –
Это должно сказать «linefeeds * или * semi-colon» –