【问题标题】:Start-Job PowerShell two jobs getting createdStart-Job PowerShell 创建两个作业
【发布时间】:2019-06-13 11:56:49
【问题描述】:

我想执行一组未包含的存储过程,作为作业,以查看在将数据库设置为包含数据库后代码中是否存在任何问题。一段时间后,我想看看存储过程是否成功。但是,我看到创建了两个工作,而不是一个存储过程的工作。如何避免创造两个工作岗位?

$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,我看到两个工作:

+----+--------------+------+---------- -+---------------+--------------+------ -------------+ |身份证 |姓名 | PSJobTypeName |状态 |有更多数据 |位置 |命令 | +----+--------------+------+---------- -+---------------+--------------+------ -------------+ | 1 | dbo.SPName |背景工作 |已完成 |真 |本地主机 |参数($storedProcToExe... | | 41 |工作41 |背景工作 |已完成 |真 |本地主机 |参数($storedProcToExe... | +----+--------------+------+---------- -+---------------+--------------+------ -------------+

【问题讨论】:

  • 我的理解是,当您使用Start-Job 时,PoSh 会启动一个父作业和一个或多个子作业。我不知道为什么,寿。 [脸红]
  • @Lee_Dailey,不。不是因为那个。这是由于 -le(小于或等于)条件造成的。我已经弄清楚了。当我在 for 循环中使用 -lt (小于)时,它工作正常。我会添加答案。
  • PS 确实创建了 2 个工作,但第二个通常在 Get-Job 上不可见。只是为了涵盖基础知识,我希望您已确保其他工作不是来自较早的运行,对吗?您可以确定get-job | remove-job -force。我在invoke-sqlcmd 有效负载上尝试了Start-job,但只得到了一份工作。所以这对我来说很难解释。
  • 啊,是的,它的forloop
  • @VenkataramanR - 啊!我误解了你的帖子。 [脸红]

标签: powershell jobs invoke-sqlcmd


【解决方案1】:

我想通了。这是由于for loop 条件的错误定义。当存储过程数为1且for循环运行两次时: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++) {

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多