如何从 SQL 作业运行 SQL Server 漏洞评估?

Sco*_*ott 4 sql-server sql-server-agent vulnerability-assessment

我想从 SQL Server 代理作业运行 SQL Server 漏洞评估。目前,我正在尝试使用 PowerShell 脚本完成一项工作,并且正在运行如下所示的命令。

Invoke-SqlVulnerabilityAssessmentScan -ServerInstance $(ESCAPE_DQUOTE(SRVR)) -Database AdventureWorks
Run Code Online (Sandbox Code Playgroud)

我已经确认 Invoke-SqlVulnerabilityAssessmentScan 在 SQL Server 上可用(我可以从那里的 PowerShell 命令提示符运行它),但是当我运行我的作业时,我收到一条错误消息,指出

术语“Invoke-SqlVulnerabilityAssessmentScan”未被识别为 cmdlet 的名称

看完这篇 Microsoft 文章后,我想知道 SQL Agent 是否只有它可以访问的 PowerShell cmdlet 的一个子集。

如何从 SQL 作业运行漏洞评估扫描?

Kin*_*hah 5

您收到该错误是因为该模块未导入。

你必须使用

import-module -name sqlserver  # or path to the module
Run Code Online (Sandbox Code Playgroud)

请参阅:在 SQL 代理作业中运行 PowerShell


Sco*_*ott 5

@Kin Shah 的回答中引用的文章帮助我找到了最终解决方案。我不得不从“PowerShell”SQL 作业类型切换到“操作系统(CmdExec)”类型。我将我的 PowerShell 命令移动到一个脚本中,并在 SQL 作业中使用如下所示的命令文本来引用它。

powershell.exe d:\data\dev\VulnerabilityScanTest.ps1
Run Code Online (Sandbox Code Playgroud)

脚本中的命令最终看起来像这样:

Invoke-SqlVulnerabilityAssessmentScan -ServerInstance "myserver\myinstance" -Database AdventureWorks
Run Code Online (Sandbox Code Playgroud)