У меня есть powershell сценарий, который я пытаюсь выполнить по SSH. Команда работает отлично, когда я выполняю ее от powershell командной строки сервера.
Вот мой сценарий Powershell:
ImportSystemModules
$vms = Get-ClusterResource | Where-Object{$_.ResourceType -like "Virtual Machine"}
foreach ($vm in $vms)
{
if ($vm -eq "Virtual Machine server-name")
{
Echo "Stop $vm"
Stop-ClusterGroup $vm.OwnerGroup
}
}
Вот команда, которую я выполняю:
C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe - файл "C:\Scripts\VMShutDown.ps1"
Однако, когда я выполняю это от удаленной машины (Ubuntu 12.04). Я получаю следующую ошибку:
Доберитесь-ClusterResource: термин 'Получ-ClusterResource' не распознан как
название cmdlet, функции, файла сценария или действующей программы. Проверьте
написание имени, или если путь был включен, проверяет, что путь
исправьте и попробуйте еще раз.
Какие-либо мысли тому, что я мог бы делать неправильно?
Операционные системы:
Windows Server 2012 Стандарт - операционная система на 64 бита
Ubuntu 12.04.4 LTS
Проблема:
Удаленная оболочка выполняет 32-битную оболочку даже на 64-битной машине. Это приводит к проблемам с загрузкой модулей, которые установлены и могут быть выполнены только с помощью 64-битного процесса (Failover Clustering например)
Solution: Создайте 64-битную обертку и процесс выполнения.
Я создал .bat-файл, который выполнил ps1-скрипт из командной строки:
powershell.exe -file "C:\{path}\{first-file}.ps1"
Внутри этого скрипта вы должны создать псевдоним, указывающий на родной 64-битный исполняемый файл для powershell:
Set-Alias ps64 "$env:windir\sysnative\WindowsPowerShell\v1.0\powershell.exe"
Как только вы сделаете это, вы можете выполнить другой файл из этого файла:
ps64 {C:\{path}\{second-file}.ps1}
Здесь он загрузит все нужные модули и выполнит ваш 64-битный скрипт.
После этого я смог выполнить свою PS-команду из Linux, и это сработало как шарм.
Ссылка на решение:
http://karlprosser.com/coder/2011/11/04/calling-powershell-64bit-from-32bit-and-visa-versa/