0

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

脚本的开头是:

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

Import-Module -name WebAdministration

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

如果我将 Import-Module 语句放在 param() 之前,则不会加载该参数。如果我根本没有 param() 语句,它工作正常。

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

我需要调用其中一个或两个以允许它们都在我的脚本中工作吗?

4

1 回答 1

2

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

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

默认情况下,模块中的命令,包括来自嵌套模块的命令,被导入调用者的会话状态。

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

尝试使用Import-Module -Name WebAdministration -Globalwhich,无论它在哪里被调用,都应该将它导入到全局状态会话中,并使其对所有东西都可用。

于 2017-06-20T10:07:57.137 回答