应用Windows更新之前进行数据库检查

时间:2019-03-01 20:56:54

标签: powershell

这就是我想要做的。

  1. 查询数据库以检查正在运行的作业
  2. 如果没有作业在运行,请运行Windows更新
  3. 如果有正在运行的作业,它将填充变量
  4. 如果没有作业在运行,则该变量保持为空。

我遇到的问题是,如果查询发生错误,则该变量保持为空,然后将运行Windows更新。

我正在寻找有关如何正确运行此检查的想法,并且仅在变量为null时才运行Windows更新。

  $result = Invoke-Sqlcmd -ServerInstance  'ipaddress,port' -Database 'instance' -Query $testQuery -QueryTimeout 15


if (!$result)
{
    Get-WUInstall -WindowsUpdate Software -AcceptAll
}

1 个答案:

答案 0 :(得分:1)

如果分配$result会给您带来错误,那么我将像这样跟踪$error变量:

$error.clear()
$result = Invoke-Sqlcmd -ServerInstance  'ipaddress,port' -Database 'instance' -Query $testQuery -QueryTimeout 15


if (!$result -and !$error)
{
    Get-WUInstall -WindowsUpdate Software -AcceptAll
}

测试案例:没有错误,也没有结果

$error.clear()
$result = $null
if (!$result -and !$error) {
Write-Host "Updating Windows..."
}

Updating Windows...

测试案例:结果错误

$error.clear()
$result = Invoke-Sqlcmd -ServerInstance  'ipaddress,port' -Database 'instance' -Query $testQuery -QueryTimeout 15
Invoke-Sqlcmd : The term 'Invoke-Sqlcmd' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

if (!$result -and !$error) {
Write-Host "Updating Windows...."
}

[bool]$error
True
[bool]$result
False

$error.clear()仅清空$error变量。如果您希望该变量在整个脚本中跟踪错误,则这可能并不完全明智。我只能假设,因为我只看到了您正在做什么的摘要。