运行 来自 SQL 服务器代理的 Powershell 脚本(运行其他 exe 文件)

Running Powershell script (that runs other exe file) from SQL Server Agent

我不确定为什么当我在 SQL Server Agent 中 运行 时,Python 脚本的这一部分无法完成工作。

这个python脚本来自“ConvertToBAK.py”。

for f in glob.glob(r'Z:\TestPCC\Yesterday\*.SQB'):  
    os.system( f'SQBConverter "{f}" "{f[:-4]}.bak" {password}' )

所以,我 运行 Powershell 调用这个 Python 文件 (ConvertToBak.py)。

当我在 SQL 服务器代理之外 运行 这个 Powershell 脚本时,一切正常。

我有以下 PowerShell 脚本。

$path = 'Z:\TestPCC'
$file = 'ConvertToBAK.py'

$cmd = $path+"\"+$file  # This line of code will create the concatenate the path and file
Start-Process $cmd  # This line will execute the cmd 

SQBCoverter 是第三方 (RedGate) 应用程序的 exe 文件,基本上可以将 SQB 文件格式转换为 BAK 文件格式。

使用相同的 Python 代码,SQL 服务器代理完成其他任务(例如将文件从这里移动到那里),但它只是 skips/does 不执行此任务。

我是否需要向 Powershell 添加任何内容,或者 SQL 服务器代理 运行 第三个 party/external exe 文件 (SQBConverter) 是否存在任何权限问题?

顺便说一句,我登录 SQL Server Agent 是我自己的帐户,因为使用其他系统帐户,我无法执行 Python 代码中的一些任务。

我也检查了这个特定exe文件的权限问题,并为所有用户授予了完全权限。

根据你的说法,应该没问题,但如果想确保以适当的用户权限启动脚本,你也可以将相应的凭据直接传递给 Start-Process Cmdlet:

#Use parameters to obtain username and password, avoid to hard-code them here.

$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))


Start-Process $cmd -Credential ($credentials)