我在用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
我开发了一个C#项目于视觉工作室2012瞄准.NET框架4其中包含一些Cmdlet
和Snapin
。我可以调试它们并且一切正常。
我已经创建了路径C:\PowerShell\Modules\
并将其添加到PSModulePath
环境变量。
我把 rMySnapIn.dll
到路径C:\PowerShell\Modules\MySnapIn
.
我希望该模块会自动加载,以便我可以使用新的 cmdlet,但事实并非如此:该模块未加载。我必须写Import-Module MySnapin
为了让它加载。
如何让模块自动加载?
可以帮助您识别问题的清单:
根据Windows PowerShell 中的新增功能 http://technet.microsoft.com/en-us/library/hh857339.aspx#BKMK_AutoLoad,“模块的自动导入是通过以下方式触发的:(a) 在命令中使用 cmdlet,(b) 为不带通配符的 cmdlet 运行 Get-Command,或 (C) 为不带通配符的 cmdlet 运行 Get-Help。” (这适用于V3和V4。)您如何确认模块未加载?
根据about_模块 http://technet.microsoft.com/en-us/library/hh847804.aspx,“仅自动导入存储在 PSModulePath 环境变量指定的位置的模块。”您声明您已将路径添加到 PSModulePath。当我检查我的路径时,我发现包含的每个路径都以反斜杠终止,因此在您的情况下,您需要C:\PowerShell\Modules\
而不仅仅是C:\PowerShell\Modules
。你的价值是多少$env:PsModulePath
?
根据这个帖子 http://tfl09.blogspot.com/2011/09/powershell-v3-autoloading-modules.html根据 Thomas Lee 以及我自己的经验,自动加载确实not与...一起工作script模块;但是,您声明您正在使用compiled模块,所以这不应该是你的问题。
The $PSModuleAutoLoadingPreference
首选项变量可用于关闭自动加载;但是,除非您明确更改它,否则它默认为All
很可能这不是问题(about_Preference_Variables http://technet.microsoft.com/en-us/library/hh847796.aspx显示可能的值)。你的价值是多少$PSModuleAutoLoadingPreference
?
最后但并非最不重要的一点是——我对您似乎混合管理单元和模块这一事实特别怀疑。它们是不同类型的实体,不能混合。管理单元通过加载Add-PSSnapin
。模块通过加载Import-Module
。正如您所知,模块也是通过自动加载来加载的——我怀疑作为管理单元编写的代码可能并非如此。此外,管理单元已被弃用;新代码应该使用模块编写(即派生自Cmdlet
or PSCmdlet
,详见编写 Windows PowerShell Cmdlet http://msdn.microsoft.com/en-us/library/ms714395%28v=vs.85%29.aspx).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)