Powershell v4不会自动导入模块

Joa*_*Fdz 4 c# powershell load module powershell-4.0

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

如何自动加载模块?

Mic*_*ens 17

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

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

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

  3. 根据这个职位从托马斯·李,以及我自己的经验,自动加载并不能一起工作的脚本模块; 但是,您声明您正在使用已编译的模块,因此这不应该是您的问题.

  4. $PSModuleAutoLoadingPreference偏好变量可以用于关闭自动加载; 但是,除非您已明确更改它,否则默认All情况下不会出现问题(about_Preference_Variables会显示可能的值).你的价值是$PSModuleAutoLoadingPreference多少?

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


Chr*_*ris 5

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

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

C:\Documents and Settings\User\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Run Code Online (Sandbox Code Playgroud)

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