术语“Get-ClusterResource”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

术语“Get-ClusterResource”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

我有一个 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/

相关内容