【发布时间】:2010-09-24 00:59:04
【问题描述】:
在下面的脚本中,我正在调用一个批处理文件来中断一些数据库之间的镜像。批处理文件有一个启动脚本的用户提示,但 PS 脚本直接跳过它。当我直接从 powershell 控制台调用批处理文件时,它工作正常。在批处理文件完成之前,如何防止脚本移过调用命令块?
$session = New-PSSession -computerName xssqlk02 -credential $cred
Invoke-Command -Session $session -Scriptblock {c:\MSSQL\DBMaintenance\Mirroring\SERVER_Remove_Mirroring.bat xssqlk02 ossqlk02}
Remove-PSSession $session
编辑:我只修剪了我遇到问题的部分代码。当这是从 ps 脚本运行时,我刚刚注意到(这是漫长的一天......)我收到以下错误,并且它在那时通过用户提示运行。
PS C:\Users\dans> C:\Tools\Scripts\test5.ps1 子目录或文件 c:\MSSQL\DBMaintenance\Mirroring\Common 已存在。 + CategoryInfo : NotSpecified: (子目录...已经存在。:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
驱动器规格无效 删除 xssqlk02 和 ossqlk02 之间 RCM 数据库的镜像:继续?是/否 0 个文件已复制
这是我直接从本地机器上的 PS 控制台运行批处理文件时的输出。
PS C:\Documents and Settings\DanS> c:\MSSQL\DBMaintenance\Mirroring\SERVER_Remove_Mirroring.bat xssqlk02 ossqlk02
删除 xssqlk02 和 ossqlk02 之间 RCM 数据库的镜像:继续?是/否是
子目录或文件 c:\MSSQL\DBMaintenance\Mirroring\Common 已存在。
\OPFLSK02\SQLBackupsForTape\DBMaintenance\Mirroring\Common\DB_Create_Snapshots.bat \OPFLSK02\SQLBackupsForTape\DBMaintenance\Mirroring\Common\DB_Force_Mirror_To_Principal.bat ………… 已复制 18 个文件
发生错误是因为批处理文件没有检查目录是否已存在。我该如何处理这个来自调用命令块以允许脚本继续?目前我无法更改批处理文件本身。
【问题讨论】:
-
在与 bat 文件的所有者合作后,我们解决了一些问题,最终我们能够将其从导致双跳问题的远程上下文中移除。然后我可以使用 George 的部分代码:Start-Process -FilePath "C:\MSSQL\DBMaintenance\Mirroring\SERVER_Remove_Mirroring.bat" -ArgumentList "xssqlk02", "ossqlk02" -Wait 并使用它。
标签: powershell