我希望连接并循环数百个 SQL 服务器/实例,以找到具有特定作业步骤的特定作业,并希望修改该作业步骤内的命令以将 1 更改为 0 - 我希望使用 PowerShell 来执行此操作。
我有一个 PS 脚本来启用或禁用整个作业,但我不想禁用该作业甚至作业步骤。我想更改步骤内的语法, 例如。从@ENABLED=1 到@ENABLED=0
我需要通过具有特定 SQL 权限的 IP 地址(例如 sa 帐户)来定位这些 SQL 服务器,因为这些服务器不在域中(vCloud Director 内的虚拟机具有经过 NAT 处理的 IP)
SQL Server 2014 w\SP1 PowerShell v5 Windows Server 2012 R2 和 2008 R2
提前致谢 达伦
最佳答案
使用 SMO
- 定义新作业步骤 SQL。您可以在倒数第二行之前的任何地方执行此操作。
- 加载 SMO 程序集。
- 创建您的服务器对象
- 假设您要查找的作业名称和步骤名称是 testJob3 和 secondaryStep,此行显示当前命令文本。这对于您想做的事情来说并不是必需的。
- 更改作业步骤命令文本
- 提交更改。
$newCmd = "DECLARE @ENABLED`nSET @ENABLED = 0`n-- This is the end"
add-type -AssemblyName "Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
$srvObj = new-object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $connectToThisServer
$srvObj.JobServer.Jobs['testJob3'].JobSteps['secondStep'].Command
$srvObj.JobServer.Jobs['testJob3'].JobSteps['secondStep'].Command = $newCmd
$srvObj.JobServer.Jobs['testJob3'].JobSteps['secondStep'].Alter()
关于sql - 如何使用 PowerShell 编辑 SQL 作业步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896704/