在param()语句之后调用时,Import-Module无法正常工作

时间:2017-06-20 09:34:55

标签: powershell parameters import-module

我有一个脚本,它使用参数向其传递详细信息,并且需要导入WebAdministration模块。

脚本的开头是:

param(
    [parameter(position=0)]
    [string]$iisAppName
)

Import-Module -name WebAdministration

然而,当我运行脚本时,我从那些使用模块的cmdlet中收到错误,说明找不到它们,因为模块显然没有被加载。

如果我将import-Module语句放在param()之前,则不加载参数。如果我根本没有param()语句就可以正常工作。

此脚本用于删除网站,但随播创建脚本(不使用param)可以正常工作。事实上,如果我运行它,它运行,如果我然后运行这个(模块仍然从第一个加载)它工作正常(恼人的...因为我没有在测试中发现问题!),所以我知道我正在正确地调用这些cmdlet。

我是否需要另外一种方法来调用其中一个或两个以允许它们在我的脚本中工作?

1 个答案:

答案 0 :(得分:2)

我认为这与会话状态有关,但需要更多信息才能确定。

https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/import-module#-global

  

默认情况下,模块中的命令(包括嵌套模块的命令)将导入到调用者的会话状态。

从全局会话状态导入模块时,控制台和所有模块都可以使用该模块。从其他模块导入模块时,它只能用于导入模块的模块。我认为当你包含Params时,它会以不同的方式对待它,也许在脚本状态会话而不是全局状态会话中运行它。

尝试使用Import-Module -Name WebAdministration -Global,无论它在何处被调用,都应将其导入全局状态会话并使其可用于所有内容。