我正在使用 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
和 Snapin
。我可以调试它们,一切正常。
我已经创建了路径 C:\PowerShell\Modules\
并将其添加到 PSModulePath
环境变量中。
我将 rMySnapIn.dll
放到路径 C:\PowerShell\Modules\MySnapIn
。
我希望模块会自动加载,这样我的新 cmdlet 就可以使用了,但它们并没有:模块没有加载。我必须编写 Import-Module MySnapin
才能加载它。
如何让模块自动加载?
最佳答案
可帮助您确定问题的 list :
根据 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
的值是多少?根据 this post根据 Thomas Lee 以及我自己的经验,自动加载不适用于 script 模块;但是,您声明您使用的是已编译模块,因此这不应该是您的问题。
$PSModuleAutoLoadingPreference
首选项变量可用于关闭自动加载;但是,除非您明确更改它,否则它默认为All
很可能这不是问题(about_Preference_Variables 向您显示了可能的值)。$PSModuleAutoLoadingPreference
的值是多少?最后但并非最不重要的一点——我特别怀疑您似乎在混合管理单元和模块这一事实。它们是不同类型的实体,不能混合使用。 Snapins 通过
Add-PSSnapin
加载。模块通过Import-Module
加载。如您所知,模块也是通过自动加载来加载的——我怀疑编写为管理单元的代码可能并非如此。此外,不推荐使用管理单元;新代码应使用模块编写(即派生自Cmdlet
或PSCmdlet
,详见 Writing a Windows PowerShell Cmdlet)。
关于c# - Powershell v4 不自动导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909746/