У меня есть сценарий 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 -file "C: \ Scripts \ VMShutDown.ps1"
Однако, когда я запускаю это с удаленного компьютера (Ubuntu 12.04). Я получаю следующую ошибку:
Get-ClusterResource: термин Get-ClusterResource не распознается как
имя командлета, функции, файла сценария или работающей программы. Проверить
написание имени, или, если путь был включен, убедитесь, что путь
исправьте и попробуйте еще раз.
Есть мысли о том, что я делаю неправильно?
Операционные системы:
Windows Server 2012 Standard - 64-разрядная операционная система
Ubuntu 12.04.4 LTS
Проблема:
Remote Power Shell выполняет 32-битную Power Shell даже на 64-битной машине. Это вызывает проблемы с загрузкой только установленных модулей, которые могут быть выполнены с использованием 64-битного процесса (например, отказоустойчивой кластеризации).
Решение: создать 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/