В пакетном файле есть ошибка, которая при вызове из сценария Powershell не позволяет завершить пакетный файл - PullRequest
0 голосов
/ 20 сентября 2010

В приведенном ниже скрипте я вызываю командный файл, чтобы разбить зеркальное отображение между некоторыми БД.Пакетный файл имеет приглашение пользователя запустить сценарий, но сценарий PS запускается прямо за ним.Когда я вызываю командный файл прямо из консоли powershell, он работает нормально.Как я могу предотвратить перемещение скрипта за блок команд invoke до тех пор, пока пакетный файл не будет завершен?

    $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

edit: я обрезал только ту часть кода, с которой у меня возникли проблемы.Когда он запускается из сценария ps, который я только что заметил (это был долгий день ....), я получаю следующую ошибку, и в этот момент она запускается через приглашение пользователя.

PS C: \ Users \ dans> C: \ Tools \ Scripts \ test5.ps1 Подкаталог или файл c: \ MSSQL \ DBMaintenance \ Mirroring \ Common уже существует.+ CategoryInfo: NotSpecified: (Подкаталог ... уже существует .:String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError

Неверная спецификация диска Удалите зеркальное отображение для баз данных RCM между xssqlk02 и ossqlk02: Продолжить?да / нет 0 Скопированные файлы

Вот что получается, когда я просто запускаю пакетный файл прямо из консоли PS на локальном компьютере.
PS C: \ Documents and Settings \ DanS>c: \ MSSQL \ DBMaintenance \ Mirroring \ SERVER_Remove_Mirroring.bat xssqlk02 ossqlk02 Удалить зеркальное отображение для баз данных RCM между xssqlk02 и ossqlk02: продолжить?y / ny

Подкаталог или файл 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 Скопированные файлы

Ошибка возникает из-за того, что в пакетном файле нет проверки на наличиекаталог уже существует.Как мне справиться с этим из командного блока invoke, чтобы позволить сценарию продолжить?На данный момент я не могу изменить сам пакетный файл.

Ответы [ 3 ]

3 голосов
/ 21 сентября 2010

Если решение Алексея не работает, вы можете попробовать это:

$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 голосов
/ 21 сентября 2010

"Неверная спецификация диска Удалите зеркальное отображение для баз данных RCM между xssqlk02 и ossqlk02:"

это может означать, что $ session не имеет доступа к ossqlk02. Попробуйте назначить себе администратора на всех компьютерах и запустить скрипт под администратором. Если это не помогает, вы можете воспользоваться утилитой - PsExec ссылка PsExec support

0 голосов
/ 21 сентября 2010

Вы можете попробовать это так1006 *}

Идея состоит в том, что командлет будет ждать, пока вы не закончите файл bat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...