2010-09-20 45 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

相關問題