Powershell v4不会自动导入模块

我使用的是Microsoft PowerShell v4

 PS C:\> get-host Name : ConsoleHost Version : 4.0 InstanceId : 3b4b6b8d-70ec-46dd-942a-bfecf5fb6f31 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : de-CH CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace 

我在Visual Studio 2012中开发了一个针对.NET Framework 4C#项目,其中包含一些CmdletSnapin 。 我可以调试它们,一切正常。

我创建了路径C:\PowerShell\Modules\并将其添加到PSModulePath环境变量中。

我把r MySnapIn.dll放到路径C:\PowerShell\Modules\MySnapIn

我希望模块能够自动加载,因此我可以使用新的cmdlet,但它们不是:模块未加载。 我必须编写Import-Module MySnapin才能加载它。

如何自动加载模块?

如果要自动加载它,可以将Import-Module MySnapin命令行添加到PowerShell配置文件中 。

要查找PowerShell配置文件的位置,只需在PowerShell中键入$profile ,默认情况下,配置文件路径为:

 C:\Documents and Settings\User\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 

如果Microsoft.PowerShell_profile.ps1文件不存在,则只需创建它。

可帮助您确定问题的清单:

  1. 根据Windows PowerShell中的新增function ,“(a)在命令中使用cmdlet,(b)为没有通配符的cmdlet运行Get-Command,或(C)为cmdlet运行Get-Help,可以触发模块的自动导入。没有通配符。“ (这适用于V3和V4。)您是如何确认模块未加载的?

  2. 根据about_Modules ,“只有存储在PSModulePath环境变量指定位置的模块才会被自动导入。” 您声明已添加了PSModulePath的路径。 当我检查我的时,我看到包含的每个路径都以反斜杠结束,所以在你的情况下你需要C:\PowerShell\Modules\而不只是C:\PowerShell\Modules 。 你的$env:PsModulePath的价值是$env:PsModulePath

  3. 根据Thomas Lee的这篇文章以及我自己的经验,自动加载不适用于脚本模块; 但是,您声明您正在使用已编译的模块,因此这不应该是您的问题。

  4. $PSModuleAutoLoadingPreference首选项变量可用于关闭自动加载; 但是,除非您已明确更改它,否则默认为All ,这可能不是问题( about_Preference_Variables显示可能的值)。 你对$PSModuleAutoLoadingPreference的价值是$PSModuleAutoLoadingPreference

  5. 最后但并非最不重要 – 我特别怀疑你似乎在混合snapins和模块。 它们是不同类型的实体,并非设计为混合。 通过Add-PSSnapin加载Snapins。 模块通过Import-Module加载。 如你所知,模块也是通过自动加载加载的 – 我怀疑编写为snapin的代码可能不正确。 此外,不推荐使用snapins; 新代码应该使用模块编写(即,从CmdletPSCmdlet ,如编写Windows PowerShell Cmdlet中所述 )。

我注意到PowerShell 4不支持以下结构:

 Modules\MySnapIn\1.0.0\MySnapIn.psm1 

更新到版本5后工作正常。

注意:我只创作脚本模块,所以我可能错了。

PowerShell模块自动加载取决于命令发现。 我怀疑如果你创建了二进制模块暴露的清单( New-ModuleManifest )和命令命令,如果有人试图使用以下命令之一,自动加载应该启动并加载模块:

 New-ModuleManifest -Path MySnappin.psd1 -RootModule MySnappin.dll -CmdletsToExport Get-Foo, Set-Bar