Invoke-sqlcmd到远程服务器问题:找不到文件

时间:2016-06-23 13:49:02

标签: sql-server powershell invoke-sqlcmd

我试图编写一个PowerShell脚本,该脚本将使用invoke-sqlcmd仅对一个远程服务器执行tsql查询。那些tsql查询很简单,比如备份/恢复数据库,创建用户等等。 以下是它的摘录:

  # 5 # Create clientdb database on secondary server by restoring the full backup for primary
  Try {
      Invoke-sqlcmd -ServerInstance 'REMOTESQLSRV'`
        -Username 'ts_sql' -Password 'somepassword'`
        -InputFile "$LScltid\__01_On_Secondary_CreateDB2_srv2.sql"`
        -ErrorAction Stop

      Write-Host " clt_$id is now restored to secondary server "`
        -ForegroundColor White -BackgroundColor Green
} Catch {
    Write-Host " Restore operation for clt_$id did not succeed. Check the error logs " -ForegroundColor Black -BackgroundColor Red 
}

我的脚本总是在这里打破。由于某些原因我无法理解,invoke-sqlcmd不使用变量" $ LScltid"解决它将找到.sql脚本的路径。

每次我必须运行它时,它会将当前目录更改为SQLERVER:\ provider或其他一些导致脚本在此步骤失败的目录。

我这样做是对的吗?如果是这样,我应该如何调整命令以按照我的预期执行。?

更新 忘了提一下,如果我运行带有硬编码变量值的脚本我能够得到我需要的结果(在这种情况下从设备恢复数据库)。

感谢您的反馈。

1 个答案:

答案 0 :(得分:0)

奇怪的是,命令现在正在运行。我真的不知道我以前做错了什么,但完全相同的命令现在正在工作。 只是面对那些面临同样问题的人:

如果必须在脚本中使用Invoke-Sqlcmd,请注意提供者更改,尤其是Invoque-Sqlcmd之后的命令是常规命令(获取,设置,复制,新建等等)。 ) 在我的情况下,在我的脚本中的两个Invoke-sqlcmd命令之间我必须将文件从本地复制到远程服务器。每次命令失败,因为提供程序已更改。作为set-location命令执行之前的copy-item的解决方法,该操作似乎可以解决问题(不知道它是否重新命令了。

感谢 Stackoverflow团队