Start-Job PowerShell две работы создаются - PullRequest
1 голос
/ 13 июня 2019

Я хочу выполнить набор автономных хранимых процедур в качестве заданий, чтобы увидеть, есть ли какие-либо проблемы в коде после создания базы данных как автономной базы данных.Через некоторое время я хочу посмотреть, являются ли хранимые процедуры успешными или нет.Но я вижу, что вместо одного задания для хранимой процедуры создаются два задания.Как избежать создания двух заданий?

$unContainedSProcs = Import-Csv -Path C:\DFLog\UnContained_Parameterless_SPs.csv
$batchSize = 50
$currentCompletedIdx = 0
$jobIds = @()
$scriptToExecute = {
    Param($storedProcToExecute)
    Invoke-Sqlcmd -Query "Exec $storedProcToExecute" -ServerInstance "<<ServerInstance>>" -Database "<<Database>>" -QueryTimeout 120
}

while ($currentCompletedIdx -le $unContainedSProcs.Length) {
    for ($i= 0; $i -le $batchSize; $i++) {
        $job = Start-Job -Name $unContainedSProcs[$i].UnContainedSProcName -ScriptBlock $scriptToExecute -ArgumentList $unContainedSProcs[$i].UnContainedSProcName
        $jobIds += $job.Id
        ++$currentCompletedIdx
    }
}

Когда я вижу список заданий, используя Get-Job, я вижу два задания:

+----+--------------+------------------+-----------+---------------+--------------+------------------------------+
| Id |     Name     | PSJobTypeName    |   State   |   HasMoreData |   Location   |           Command            |
+----+--------------+------------------+-----------+---------------+--------------+------------------------------+
|  1 |   dbo.SPName | BackgroundJob    | Completed |  True         |    localhost |    param($storedProcToExe... |
| 41 |  Job41       | BackgroundJob    | Completed |  True         |    localhost |    param($storedProcToExe... |
+----+--------------+------------------+-----------+---------------+--------------+------------------------------+

1 Ответ

0 голосов
/ 13 июня 2019

Я понял это. Это связано с неправильным определением условия for loop. Когда число хранимых процедур равно 1 и цикл for выполняется дважды: 0, 1. Это связано с -le (меньше или равно) Длина $ unContainedSProcs (1).

В $ unContainedSProcs есть только одна запись [0]. Для первого запуска это нормально. Для второго запуска нет записи [1] в $ unContainedSProcs. Итак, пустая работа создается. После изменения -le на -lt создается только одно задание.

От:

for ($i= 0; $i -le $batchSize; $i++) {

До:

for ($i= 0; $i -lt $batchSize; $i++) {
...