【问题标题】:Scheduled Task null value return from sqlcmd in PowerShell从 PowerShell 中的 sqlcmd 返回计划任务空值
【发布时间】: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


【解决方案1】:

今天确实遇到了这个问题。 此查询的结果是System.Data.Datarow 类型。我猜你只是在控制台/ISE 中输入$Result? PowerShell 很好,可以进行即时转换。

尝试Write-Host "$Result",您应该会看到System.Data.Datarow,而不是您的结果。

然后问题就变成了将此System.Data.Datarow 转换为的位置。这实际上取决于您的其余代码(这不是我的强项)。下面是懒惰的例子。

$Results | Out-file ".\Results.txt"
$csv = ConvertTo-Csv $Results

【讨论】:

  • 感谢您的想法,我知道查询在结果中返回两列,我的下一行是 $Col1 = $Result.Col1 等等,当我手动运行时填充它并在计划时为空白。
  • 乐于助人。嗯,我明白了;我希望预定的运行也返回 $Results 但以不同的形式(我的 anologues $Result.Col1 不是空白)上面评论过关于 Invoke-Sqlcmd 错误。
【解决方案2】:

这是“解决方案”,虽然它真的感觉像是作弊。我尝试了不同的触发方法来启动脚本;首先是一个 .bat 文件,它在手动启动时也疯狂地运行,但在计划时也失败了。接下来,我编写了一个简单的 .vbs 脚本来启动 PowerShell 脚本,该脚本在手动运行时有效,至少,它确实从调度程序中正确运行......我无法解释......

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多