如何找到PowerShell cmdlet的模块?

时间:2017-11-04 21:47:02

标签: powershell cmdlet

我正在尝试使用Hyper-V设置VM。我需要运行get-vmserver和一些相关的comdlet,但是我无法找到它们所在的模块。当我运行时:

(get-command -name start-transcript).modulename

我收到了回复

Microsoft.Powershell.Host

但是当我跑步时

(get-command -name get-vm).modulename

我得到了无法识别get-vm的响应。

我相信这意味着我必须使用某个模块名称运行import-module,但我找不到"标准"的列表。 cmdlet及其模块。

2 个答案:

答案 0 :(得分:2)

这意味着PowerShell不知道任何名为Get-VM的命令。

对于要识别的命令,它必须:

  • 在会话中定义。
  • 在已加载的模块中定义。
  • 在符合自动加载条件的模块中定义

Microsoft的模块往往格式正确并且支持自动加载,因此如果安装了它,它将会正常工作。

因此,我强烈怀疑您没有安装Hyper-V模块(Get-VM所在的模块)。

要查看已安装但未必导入的模块,请使用Get-Module -ListAvailable

但请注意,如果模块在那里列出并且格式正确,那么这些命令也可以在Get-Command中使用。

演示

查看Get-Module -ListAvailable中列出的模块,但如果明确调用Get-Command -Name,则不会列出。在我的系统上,我将使用VpnClient

Get-Module -ListAvailable的输出中我可以看到它有一个命令Add-VpnConnection

如果我拨打Get-Command -Name Add-VpnConnection,则通话有效,并将命令来源显示为VpnClient

另外,如果我现在打电话给Get-Module -Name VpnClient,它会显示出来,而不是之前。

这是因为Get-Command引用模块时隐式加载了模块。

答案 1 :(得分:0)

您是正确的,您必须运行Import-Module并选择Hyper-V模块。确保已在Windows Server上安装Hyper-V功能。这可以在服务器管理器中执行。