问题标签 [powershell-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1309 浏览

powershell - Powershell PSModule unc 路径

我正在向用户会话环境变量 PSModule 添加一个 UNC 路径,例如“\\server\share\modules”,如下所示:

但是,当我尝试从此路径加载模块时,出现错误

列出所有可用模块,应该显示 UNC 路径可用模块,但不会显示任何 UNC 文件夹模块......

有人知道为什么吗?谢谢

0 投票
0 回答
203 浏览

windows - 如何使用多个 .psm1 文件创建 powershell-5 模块

免得说我有三个类名DogCat并且Tree在匹配的文件Dog_file.psm1中,Cat_file.psm1Tree_file.psm1. 我需要用这三个文件创建一个 Powershell 模块。当我通过https://msdn.microsoft.com/en-us/library/dd878337(v=vs.85).aspx阅读时,我觉得它可以实现。

通过阅读各种帖子和文章,我认为NestedModules财产.psd1是一种方式。但不确定文件需要放置的文件夹结构和文件的语法究竟如何.psd1。到目前为止找不到任何样本

以前有人这样做过吗?我在用着Powershell 5

0 投票
1 回答
223 浏览

powershell - 如何从二进制 cmdlet 调用脚本模块 cmdlet?

我正在 C# 中通过继承来编写 Powershell cmdlet PSCmdlet。这是包含二进制和脚本组件的 powershell 模块的一部分。

我希望能够从我的二进制 cmdlet 中调用脚本模块 cmdlet。

我发现继承 fromPSCmdlet让我可以访问更多 Powershell 的内容,我专门研究了这些内容InvokeCommand.GetCmdlet()InvokeCommand.GetCommand()但它们似乎都返回了 CommandInfo 对象,而这些对象似乎没有调用它们的方法。

我应该打电话InvokeCommand.InvokeScript()来调用我的 cmdlet 吗?如果是这样,CommandInfo应该如何/应该使用对象来提供帮助?

0 投票
0 回答
283 浏览

powershell - 从模块中公开 powershell 类型定义

我一直在本地测试一个新的 PowerShell 模块,它有几个函数和几个由其他模块使用的自定义类型定义。

我定义的一种类型是详细程度:

我可以通过 using 使用该类型Import-Module,但是我希望它在安装模块后自动加载(如函数)。如果我不说它找不到类型的错误。

测试清单暴露了所有功能,但我为发布版本定义了更严格的清单,因为某些功能和类型实际上仅供内部使用,所以我不想在发布模块时暴露它们。

我是否需要将类型添加到清单中或找到不同的方式来公开类型?理想情况下,我想知道清单是否可以处理这个问题。

0 投票
0 回答
268 浏览

c# - 如何在 Powershell 二进制模块中配置可变连接字符串?

我有一个用 C# 编写的 PowerShell 模块,它使用实体框架来访问 MS SQL 服务器。在我的项目中,我创建了一个 module.psd1 文件。此文件指定在加载 dll 之前要运行的脚本 (LoadAppConfig.ps1)。该脚本读取 app.config 并将连接字符串添加到当前应用程序域。

有一个更好的方法吗?我知道有些模块在加载它们时可以接受参数,但我无法找到在 C# 中实现这一点的方法。或者,有没有办法在模块中嵌入默认值,可以通过 cmdlet 更改?如果可能的话,我想避免重新编译模块来更改数据源。

加载AppConfig.ps1

0 投票
1 回答
937 浏览

powershell - 创建 adalsql.dll Azure 自动化模块(该模块应包含程序集清单)

我需要在 Azure 自动化中使用 adalsql.dll,以便我可以通过 Active Directory 密码身份验证模式连接到 Azure SQL。有关详细信息,请参阅此帖子:Azure 自动化中的 Active Directory 密码连接 Azure SQL 失败

下载此 MSI 会将 adalsql.dll 提取到 C:\Windows\System32:https ://www.microsoft.com/en-us/download/details.aspx?id=48742

根据研究和给出的建议,创建 Azure 自动化模块似乎是可行的方法。但是,当我只需要添加 DLL 时,我还没有找到有关如何创建模块的指导。

我创建了以下目录结构(我最终压缩上传):

在我的 psm1 文件中,我使用以下内容:

我可以将其导入 Azure 自动化,它显示为可用(文件位于“C:\Modules\User\Microsoft.ADAL.SQL”目录中,但是当我运行 Runbook 时,它会失败并显示与以前相同的消息:

新对象:使用“1”参数调用“.ctor”的异常:“不支持关键字:'身份验证'。”

如果在我的 Runbook 中添加上面的 Add-Type 行,它也会生成以下错误:

Add-Type : 无法加载文件或程序集 'file:///C:\Modules\User\Microsoft.ADAL.SQL\adalsql.dll' 或其依赖项之一。该模块应包含程序集清单。

我需要调整我的 PowerShell 来加载 dll 吗?如果是这样,怎么做?

0 投票
1 回答
2894 浏览

powershell - 未找到但已安装 Powershell 二进制模块

我创建了一个名为 ODBCManager 的二进制 Powershell 模块。从提要安装后,我能够成功使用它的功能,但Get-Module没有按名称找到它(Get-Module -Name ODBCManager返回 null)。Get-Module -ListAvailable将在 2 分钟查询后显示它,因此它肯定已安装。-Verbose安装时也说成功。

  • 我将它托管在 ProGet 的 Powershell Modules Feed 下
  • 在发布时,文件夹名称和 DLL 名称相同
  • 清单已创建
  • 函数按预期导出和执行

显现:

我忘记了什么吗?因为我什么都试过了。


编辑:在@BenH 的帮助下,我能够进一步研究,发现您可以调用Get-Module -ListAvailable -Name ODBCManager以快速显示您的模块已安装,但未导入。-- 供以后参考!

0 投票
2 回答
1060 浏览

powershell - 如何确保使用 PowerShell 模块清单 (.psd1)

我为它创建了一个 PowerShell 模块MyUtil.psm1和一个清单文件MyUtil.psd1。在 psd1 文件中,它定义了前缀以防止导出函数的名称冲突:

这样,运行后,就会出现psm1文件中Import-Module .\MyUtil.psd1的函数,一切正常。但是如果有人跑直接导入psm1文件,psd1文件根本就不用,我想要的前缀也不会应用。Get-CommandGet-MyToolboxCommandImport-Module .\MyUtil.psm1

如果我想防止这种情况(直接导入 MyUtil.psm1),有没有办法允许导入相应的 psd1 清单文件而不是 psm1 文件?还是以编程方式检测此模块不是通过 psd1 导入的,因此我可以警告用户使用 psd1?

0 投票
2 回答
659 浏览

powershell - 如何将控制台输出重定向到模块内的 PowerShell 输出?

如果我正在编写一个二进制 PowerShell 模块并且我碰巧使用了一个写入 STDOUT ( Console.Out) 的 .NET 库——是否有推荐的方法将控制台输出重新路由到 PowerShell 的输出流?

Console.Out我可以通过设置我自己的TextWritervia来拦截Console.SetOut(...)它,然后用它做一些事情(即我可以用 a 缓冲输出StringWriter并在将来的某个时候将其全部写出来,或者我可以编写一个TextWriter将所有Write命令发送到 PowerShell 的自定义WriteObject)。

我的问题是,是否已经有一些标准或推荐的做法来执行此操作或 PowerShell 库中的一些内置工具?

0 投票
2 回答
1605 浏览

powershell - powershell 模块有没有办法进入其调用者的范围?

我有一组实用程序函数和其他代码,我将它们点源到我编写的每个 powershell 文件中。在受到影响它的调用者范围变量的影响后,我开始考虑将其更改为 powershell 模块。

我遇到了一些我在其中做的特殊事情的问题,我实际上确实希望在作用域之间进行一些交互。我想知道是否有无论如何“进入”模块调用者的范围以在移动到 powershell 模块时保留此功能?

如果不是,那么将这些更专业的东西保存在点源文件中并将更传统的实用程序功能移动到模块中是我最好的前进路径吗?以下是不容易移动到模块的内容:

  • 设置严格模式和错误操作首选项以保持理智,例如:

    当代码从 .psm1 powershell 模块运行时,这(如预期的那样)对调用者的环境没有影响。有没有办法从 psm1 范围跨越到调用者范围来进行这些更改?

  • 打印有关顶级脚本调用的信息,例如:

    同样,这些命令一旦放置在 .psm1 文件中,就无法再看到最顶层的调用范围