2010-09-20 46 views
0

在下面的脚本中,我调用了一个批处理文件来中断某些dbs之间的镜像。该批处理文件有一个用户提示符来启动脚本,但PS脚本正好赶上它。当我直接从powershell控制台调用批处理文件时,它工作正常。我怎样才能避免脚本移过调用命令块直到批处理文件完成?批处理文件有错误,从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:(A子目录...已经exists.:String)[],的RemoteException + FullyQualifiedErrorId:NativeCommandError

无效驱动器规格 删除镜像xssqlk02和ossqlk02之间RCM数据库:继续? y/n 0复制的文件

以下是当我直接从本地计算机上的PS控制台运行批处理文件时的输出结果。
PS:C:\ Documents and Settings \ DanS> c:\ MSSQL \ DBMaintenance \ Mirroring \ SERVER_Remove_Mirroring.bat xssqlk02 ossqlk02 删除xssqlk02和ossqlk02之间的RCM数据库的镜像:继续? y/n y

子目录或文件c:\ MSSQL \ DBMaintenance \ Mirroring \ Common已存在。

\ OPFLSK02 \ SQLBackupsForTape \ DBMaintenance \镜像\共同\ DB_Create_Snapshots.bat \ OPFLSK02 \ SQLBackupsForTape \ DBMaintenance \镜像\共同\ DB_Force_Mirror_To_Principal.bat ....... 18文件(多个)复制

发生错误的原因是批处理文件没有检查目录是否已经存在。我如何处理这个来自invoke命令块的脚本以允许脚本继续?目前我无法更改批处理文件本身。

+0

与bat文件的所有者合作后,我们解决了多个问题,最终我们能够从远程上下文中引发双跳问题。然后,我可以参与George的代码:Start-Process -FilePath“C:\ MSSQL \ DBMaintenance \ Mirroring \ SERVER_Remove_Mirroring.bat”-ArgumentList“xssqlk02”,“ossqlk02” - 等待并利用它。 – 2010-10-13 23:34:51

回答

3

如果阿列克谢的解决方案不起作用,你可以试试这个:

$job = Invoke-Command -Session $session -Scriptblock { Start-Process -FilePath "C:\MSSQL\DBMaintenance\Mirroring\SERVER_Remove_Mirroring.bat" -ArgumentList "xssqlk02", "ossqlk02" -Wait } -AsJob 
$job | Wait-Job 
0

你可以尝试这样

调用命令-Session $会议-ScriptBlock {开始 C:\ MSSQL \ DBMaintenance \镜像\ SERVER_Remove_Mirroring.bat xssqlk02 ossqlk02 - 等待}

的想法该cmdlet将等待,直到完成bat文件。

+0

这实际上并没有工作当我和start和-wait项目时,我得到以下错误:无法找到接受参数'ossqlk02'的位置参数。 + CategoryInfo:InvalidArgument:(:) [Start-Process],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand – 2010-09-20 21:27:30

+0

尝试将其更改为:'Invoke-Command -Session $ session -Scriptblock {Start-Process -FilePath“C:\ MSSQL \ DBMaintenance \ Mirroring \ SERVER_Remove_Mirroring.bat”-ArgumentList“xssqlk02”,“ossqlk02”--Wait}'虽然我不是100%肯定它会起作用。 – 2010-09-20 22:01:19

+0

这实际上只是导致脚本启动,只是坐在那里没有任何提示或行动如此之多。我只是注意到其他的东西,所以我要编辑一下这个问题。 – 2010-09-20 23:00:12

0

“无效驱动器规格删除镜像xssqlk02和ossqlk02之间RCM数据库:”

它可能表明,$会议没有权限访问ossqlk02。 尝试在所有计算机上指定一个管理员并在管理员下运行脚本。如果它没有帮助,你可以使用实用程序 - PsExec link PsExec support

+0

我非常有信心,因为我是盒子上的管理员,所以它不是权限问题。此外,如果您注意到错误detials问题是我正在调用的批处理文件试图创建一个已经存在的目录。当它作为远程进程的一部分运行时,会导致它运行在用户提示符和批处理文件的实际运行中,这是有关错误的一些说明。 – 2010-09-21 20:01:20

相关问题