我正在使用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 中开发了一个 C#项目,目标是 .NET Framework 4 ,其中包含一些Cmdlet
和{ {1}}。我可以调试它们,一切正常。
我已创建路径Snapin
并将其添加到C:\PowerShell\Modules\
环境变量中。
我将r PSModulePath
放到路径MySnapIn.dll
。
我希望模块能够自动加载,因此我可以使用新的cmdlet,但它们不是:模块未加载。我必须写C:\PowerShell\Modules\MySnapIn
才能加载它。
如何自动加载模块?
答案 0 :(得分:16)
可帮助您确定问题的清单:
根据What's New in Windows PowerShell,"模块的自动导入由(a)在命令中使用cmdlet,(b)为没有通配符的cmdlet运行Get-Command,或( C)为没有通配符的cmdlet运行Get-Help。" (这适用于V3和V4。)您是如何确认模块未加载的?
根据about_Modules,"只会自动导入存储在PSModulePath环境变量指定位置的模块。"您声明已添加了PSModulePath的路径。当我查看我的时,我发现包含的每个路径都以反斜杠结束,因此在您的情况下,您需要C:\PowerShell\Modules\
而不是C:\PowerShell\Modules
。您$env:PsModulePath
的价值是多少?
根据Thomas Lee的this post以及我自己的经验,自动加载确实 与脚本模块一起工作;但是,你说你正在使用编译的模块,所以这不应该是你的问题。
$PSModuleAutoLoadingPreference
首选项变量可用于关闭自动加载功能;但是,除非您明确更改了它,否则默认为All
,这可能不是问题(about_Preference_Variables显示可能的值)。您对$PSModuleAutoLoadingPreference
的价值是什么?
最后但并非最不重要 - 我特别怀疑你似乎在混合snapins和模块。它们是不同类型的实体,并非设计为混合。 Snapins通过Add-PSSnapin
加载。模块通过Import-Module
加载。如你所知,模块也是通过自动加载加载的 - 我怀疑编写为snapin的代码可能不正确。此外,不推荐使用snapins;新代码应使用模块编写(即,源自Cmdlet
或PSCmdlet
,详见Writing a Windows PowerShell Cmdlet)。
答案 1 :(得分:4)
如果您想自动加载它,可以将Import-Module MySnapin
命令行添加到PowerShell profile。
要查找PowerShell配置文件的位置,只需在PowerShell中键入$profile
,默认情况下,配置文件路径为:
C:\Documents and Settings\User\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
如果Microsoft.PowerShell_profile.ps1
文件不存在,只需创建它。
答案 2 :(得分:1)
我注意到PowerShell 4不支持以下结构:
Modules\MySnapIn\1.0.0\MySnapIn.psm1
更新到版本5后工作正常。
答案 3 :(得分:0)
注意:我只创作脚本模块,所以我可能错了。
PowerShell模块自动加载取决于命令发现。我怀疑如果你创建了二进制模块暴露的清单(New-ModuleManifest
)和命令命令,那么如果有人试图使用其中一个命令,自动加载应该启动并加载模块:
New-ModuleManifest -Path MySnappin.psd1 -RootModule MySnappin.dll -CmdletsToExport Get-Foo, Set-Bar