【发布时间】:2016-02-20 10:55:51
【问题描述】:
我有一个 PowerShell 脚本,它从 Windows Server 2008R2 服务器运行 SQL 查询;当使用域管理员/服务帐户登录到服务器时,脚本会从基本 PS 和 ISE 运行并完成。如果我使用来自任务计划程序的相同管理员/服务帐户计划相同的脚本,则查询不会返回任何值。计划任务以“以最高权限运行”方式运行。PowerShell 为 V4。
$Result = Invoke-Sqlcmd -ServerInstance Server -Database Database -Query $Query
手动运行$Result 始终返回一个值,但从计划任务中$Result 始终为空。在这两种情况下,脚本的其余部分都会成功运行并完成。
【问题讨论】:
-
将您的错误输出捕获到一个文件中,并使用错误更新您的问题。我最初的想法是,这是与用户会话相关的,您可能需要使用凭证会话。
-
从它的声音来看,它似乎没有失败,所以我认为没有要捕获的错误。除非
$ErrorActionPreference已在此脚本中设置,否则了解这些信息会很有用。也许只是不返回任何东西?也许$query是如何生成的……我不确定。 -
感谢您的想法,通常在最初开发脚本时,我会在每个可能的操作下添加 Add-Content $Location $Variable 行,以确保我可以在文本文件中遵循逻辑,这非常很有用,在这种情况下,对我手动运行来说,我“看到”了一个针对相关变量的输出,但是计划任务返回一个空白。
-
我使用 Start-Transcript 运行,记录的错误是:Transcript started, output file is d:\Logs\Debug.out Invoke-Sqlcmd : 术语“Invoke-Sqlcmd”未被识别为cmdlet、函数、脚本文件或可运行程序的名称。 sqlcmd 从 cmd 运行,invoke-sqlcmd 从 PS 和 ISE 运行得非常好......只是没有按计划运行。
-
按计划任务运行时是否加载了 SQL 管理单元/模块?
Add-Snapin是脚本的一部分,还是在使用控制台/ISE 时自动加载(例如通过Profile)?这是 32/64 位 PowerShell 吗? Invoke-SqlCmd how-to
标签: powershell scheduled-tasks sqlcmd