创建 Start-Job PowerShell 两个作业
Start-Job PowerShell two jobs getting created
我想将一组未包含的存储过程作为作业执行,以查看将数据库作为包含数据库后代码中是否存在任何问题。一段时间后,我想看看存储过程是否成功。但是,我看到创建的不是存储过程的一项工作,而是两项工作。如何避免创建两个工作岗位?
$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... |
+----+--------------+------------------+-----------+---------------+--------------+------------------------------+
我想通了。这是由于 for loop
条件定义错误。当存储过程数为1,for循环为运行ning两次时:0、1。这是由于-le(小于等于)$unContainedSProcs(1)的长度。
$unContainedSProcs 中只有一项 [0]。对于第一个 运行,没关系。对于第二个 运行,$unContainedSProcs 中没有条目 [1]。因此,正在创建空作业。将 -le 更改为 -lt 后,只会创建一个作业。
发件人:
for ($i= 0; $i -le $batchSize; $i++) {
收件人:
for ($i= 0; $i -lt $batchSize; $i++) {
我想将一组未包含的存储过程作为作业执行,以查看将数据库作为包含数据库后代码中是否存在任何问题。一段时间后,我想看看存储过程是否成功。但是,我看到创建的不是存储过程的一项工作,而是两项工作。如何避免创建两个工作岗位?
$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... | +----+--------------+------------------+-----------+---------------+--------------+------------------------------+
我想通了。这是由于 for loop
条件定义错误。当存储过程数为1,for循环为运行ning两次时:0、1。这是由于-le(小于等于)$unContainedSProcs(1)的长度。
$unContainedSProcs 中只有一项 [0]。对于第一个 运行,没关系。对于第二个 运行,$unContainedSProcs 中没有条目 [1]。因此,正在创建空作业。将 -le 更改为 -lt 后,只会创建一个作业。
发件人:
for ($i= 0; $i -le $batchSize; $i++) {
收件人:
for ($i= 0; $i -lt $batchSize; $i++) {