我有一个 PowerShell 脚本 (test.ps1),它通过 Invoke-Sqlcmd 执行一个简单的 SQL 查询。该脚本位于远程文件共享服务器上。下面是脚本:
param
(
[string]$SQL_username,
[string]$SQL_password
)
Write-Host ('begin script')
$db = 'some_DB'
$server = 'some_IP'
$query = 'SELECT TOP 10 * FROM some_schema.some_table'
Invoke-Sqlcmd -Username $SQL_username -Password $SQL_password -ServerInstance $server -Database $db -Query $query -QueryTimeout 60000
Write-Host ('end script')
当我使用 Tidal 用户帐户远程访问文件共享服务器时,脚本成功执行并按预期执行。
我有一个执行此 test.ps1 脚本的相应潮汐作业。以下是潮汐工作信息:
命令
C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe
命令参数
-ExecutionPolicy bypass -File D:\some_path\test.ps1
-SQL_username "<SQL_username.1>"
-SQL_password "<SQL_password.2>"
当我通过 Tidal 运行脚本时,Tidal 中的输出屏幕显示:
开始脚本
Invoke-Sqlcmd:术语“Invoke-Sqlcmd”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称...
结束脚本
因此,很明显,无论 Tidal 使用什么用户来运行脚本,用户都能识别Write-Host
cmdlet,但无法识别Invoke-Sqlcmd
cmdlet。怎么会这样?而且,我该如何解决这个问题?(我发现 Tidal 用户是 NT AUTHORITY\SYSTEM,而不是作业的 Run 选项卡中指定的 Runtime User,这与我登录远程服务器时使用的 Tidal 用户相同。)