Import-Module WebAdministration 不会从脚本加载,而是从命令行加载

Import-Module WebAdministration wont load from script but does from command line

我正在着手一个使用 PowerShell 编写构建脚本的项目。该构建使用 WebAdministration 模块来管理本地 IIS 实例。当我 运行 构建脚本时,在尝试导入 WebAdministration 时抛出以下错误。

Error: 06/29/2016 17:28:35: At C:\dev\src\nib-ravendb\build\ConfigureIis.ps1:10 char:1 + Import-Module WebAdministration + ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ [<<==>>] Exception: The specified module 'WebAdministration' was not loaded because no valid module file was fo und in any module directory. ERROR: 1

但是当我在 PowerShell 命令行 运行 Import-Module WebAdministration 导入模块时,我可以使用它的功能。随后运行构建脚本仍然失败。

我有 IIS 7.5PowerShell 4

有谁知道为什么这个导入会在脚本中失败而不是在命令行中失败,以及如何修复它?

对于服务器,您需要在 Web Server (IIS) 下安装角色 Management Tools 才能使用 WebAdministration 模块。要查看您是否有可用的模块,请使用 Get-Module -ListAvailable.

对于 Windows 710,您需要在 Internet Information Services >> Web Management Tools 下安装功能 IIS Management Scripts and tools

您可以尝试手动定位 WebAdministration .psd1 文件,然后将其导入。使用 $env:psmodulepath 帮助找到模块的存储位置然后 运行:

Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1' 

如果 Server 2008 您可以尝试以下方法,但这可能不适用于 2012 年及以后的版本:

Add-PSSnapin WebAdministration

注意您需要运行具有管理员权限的脚本才能使用Import-Module或[加载WebAdministration模块=27=]。

同时检查您是否将 PowerShell 的执行策略设置为 Unrestricted

Set-ExecutionPolicy unrestricted

您可能想看看这个 Question

最后有一个问题,可能是巧克力?,截断 $env:PSModulePath 到第一个条目,这就是为什么如果我输入它而不是在脚本中输入它,脚本可以工作的原因。

我通过在脚本的不同点记录 $env:PSModulePath 找到它,我是 运行。

我通过重新排序 $env:PSModulePath 中的条目来解决这个问题。

查看@Richard 的回答以获得其他一些好的建议。

我遇到了同样的情况,我已经通过在 W2016 服务器上安装 Windows Feature Web-Scripting-Tools 来修复它:

Add-WindowsFeature Web-Scripting-Tools

就我而言 (Windows 10),我使用的是 Powershell 7,这只是拒绝安装 WebAdministration 模块,尽管它存在于 Windows 功能中。

使用以前版本的PS:例如VS 的开发者 PowerShell 成功了。