2

我有一个包含多台计算机的网络,我想将我所有的 PowerShell 模块放在一个网络共享中,这样我就可以从任何计算机轻松访问它们。这适用于脚本模块,但是二进制模块似乎不起作用。

Import-Module语句可以正常执行而不会出错,但是当您使用 时Get-Module,它将显示新导入的二进制模块没有导出任何 Cmdlet。如果我将模块复制到计算机上的本地目录中,一切都会按预期工作。

有没有办法从网络位置导入二进制模块?

4

2 回答 2

5

抱歉,我知道这个问题很老,但认为为 PowerShell v3 提供答案会很有用。我在 PowerShell v3 中遇到了同样的问题,使用 Phil 的答案能够解决它 - 只需稍作修改。

PowerShell v3 已经使用 .NET 4.0,所以我实际上只需要 loadFromRemoteSources 部分。所以我的$PSHOME\powershell.exe.config样子是这样的:

<?xml version="1.0"?>
<configuration>
    <runtime>
        <loadFromRemoteSources enabled="true"/>
    </runtime>
</configuration>

简单的!感谢菲尔的指点,会赞成你的回答,但我还没有声誉。

于 2013-10-09T20:35:36.827 回答
0

我发现加载 PowerShell 模块的最简单方法是将配置文件添加到$PSHOME目录中。

我创建了一个文本文件$PSHOME\powershell.exe.config并将以下内容放入文件中:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
    <runtime>
        <loadFromRemoteSources enabled="true"/>
    </runtime>
</configuration>

这做了两件事:

  1. 使用supportedRuntime确保 PowerShell 在 .NET 4.0 而不是 .NET 3.5 下运行。这很重要,因为 .NET 4 具有更易于理解和配置的不同安全策略。
  2. 使用loadFromRemoteSources(仅在 .NET 4+ 中可用)来启用从远程位置(例如网络文件共享)加载 DLL。
于 2012-11-26T20:08:33.307 回答