Powershell脚本在Windows 2008 R2上运行正常,但在Windows 2012 R2上无效

时间:2015-08-06 19:16:33

标签: sql-server powershell powershell-v4.0

我是Powershell的新手,我不知道如何处理我遇到的以下问题。

我使用以下脚本将SQL BAK文件从服务器复制到NAS。我认为这是一项安全措施,以确保我的服务器外部有一个SQL BAK文件的副本。这个脚本的工作方式非常简单。只需创建一个SQL作业,并确保" Type:Powershell"被选中,安排工作并预先改变o!您的BAK文件将被远程复制到您的NAS。此脚本与Windows 2008 R2完全兼容,但它不适用于Windows 2012。

当我在Windows 2012 R2服务器上运行SQL作业时,作业会报告它已成功运行。但是,当我检查NAS文件夹时,没有文件被复制。我检查日志和日志报告作业也成功运行。

param
(
[Parameter(Position=0, Mandatory=$true)] [string]$SrcFolder,
[Parameter(Position=1, Mandatory=$true)] [string]$TgtFolder
)

##copy

robocopy $SrcFolder i:\sqlbackups $TgtFolder \as2\sqlbackups\SERVERNAME /e /copy:dat /log+:i:aslog\log.txt

##set exit code
$exit = $lastexitcode -band 24

exit $exit

所以我继续戴上我的故障排除帽,以确定此脚本无法复制文件的原因。我首先检查是否可以在没有powershell语法的情况下运行robocopy cmd。所以我打开了一个命令(admin)shell,然后运行了以下命令。

robocopy i:\sqlbackups \as2\sqlbackups\SERVERNAME /e /copy:dat 

正如我所料,这个命令运行得很好,没有任何问题。

然后我继续下一步并将powershell脚本复制到我的windows powershell ISE。我运行了脚本,它提示我以下内容。

  位于命令管道位置的

cmdlet 1提供以下内容的值   参数:SrcFolder:

我以前从未见过这个,我怀疑它与Windows 2012 R2有关。我希望此脚本在没有任何提示的情况下运行,就像在Windows 2008 R2中一样。有谁知道我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

它在ISE中提示的原因是因为您有必须提供的参数。它在2008 R2 / PowerShell 2.0上也会做同样的事情。

我不认为这与它为什么不在2012 R2上工作有关。听起来你正试图直接从SQL服务器运行它,所以我不得不假设2个不同的操作系统表明你有2个不同的SQL服务器运行实例。

由此,我怀疑该作业是作为2个不同的用户运行的,其中一个用户可以访问NAS而另一个用户没有。

这里有一些猜测,但如果您有更多详细信息,我会更新答案。