我有一个 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)运行此程序时,出现以下错误:
Get-ClusterResource:术语“Get-ClusterResource”未被识别为
cmdlet、函数、脚本文件或可运行程序的名称。检查
名称的拼写,或者如果包含路径,请验证该路径是否
纠正并重试。
有什么想法我可能做错了什么?
操作系统:
Windows Server 2012 标准版 - 64 位操作系统
Ubuntu 12.04.4 LTS
答案1
问题:
远程 power shell 执行 32 位 power shell,即使在 64 位机器上也是如此。这会导致加载仅安装并能够使用 64 位进程执行的模块(例如故障转移群集)时出现问题
解决方案:创建一个64位包装器和执行进程。
我创建了一个.bat 文件,从命令行执行 ps1 脚本:
powershell.exe -file "C:\{path}\{first-file}.ps1"
在这个脚本中,你必须创建一个别名来指向 powershell 的本机 64 位可执行文件:
Set-Alias ps64 "$env:windir\sysnative\WindowsPowerShell\v1.0\powershell.exe"
完成此操作后,您可以从此文件内执行另一个文件:
ps64 {C:\{path}\{second-file}.ps1}
在这里,它将加载所有适当的模块,并执行您的 64 位脚本。
完成后,我就可以从 Linux 执行我的 PS 命令,而且效果非常好。
解决方法参考:
http://karlprosser.com/coder/2011/11/04/calling-powershell-64bit-from-32bit-and-visa-versa/