我在执行SQL Server代理作业步骤期间无法执行Powershell脚本。我的powershell命令基本上连接到远程计算机(在同一域内),以将单个值写入注册表。从SQL机器,我能够成功地在本地(从Powershell ISE界面)手动运行Powershell脚本,因此我知道它可以工作。问题出在远程服务器上SQL Server代理的权限中,但我在此方面一无所知。
如果我使用根计算机“。”,则此Powershell命令将在我的SQL Agent Job步骤中工作。
# Access the DBQ registry setting for pausing
$HKLM = 2147483650 #HKEY_LOCAL_MACHINE
$reg = [wmiclass]'\\.\root\default:StdRegprov'
$key = "SOFTWARE\MySoftwareApplication"
$name = "PauseModule"
$value = "1"
$reg.SetStringValue($HKLM, $key, $name, $value)
我的问题是当我像这样指定远程目标计算机时出现异常:
$reg = [wmiclass]'\\XXX.XX.XXX.XXX\root\default:StdRegprov'
这是例外:
以用户身份执行:DB-MAIN \ SYSTEM。作业步骤在PowerShell脚本的第4行收到错误。对应的行是'$ reg = [wmiclass]'\ XXX.XX.XXX.XXX \ root \ default:StdRegprov''。更正脚本并重新计划作业。PowerShell返回的错误信息为:'无法将值“ \ XXX.XX.XXX.XXX \ root \ default:StdRegprov”转换为“ System.Management.ManagementClass”。错误:“访问被拒绝。(来自HRESULT的异常:0x80070005(E_ACCESSDENIED))”。处理退出代码-1。该步骤失败。
我尝试启用防火墙端口和程序(在目标服务器和源服务器上)没有任何运气。它可以手动运行,但不能在SQL中自动运行,这有什么用?
