问题标签 [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 投票
1 回答
980 浏览

c# - Powershell 二进制模块:Cmdlet 参数值的动态选项卡完成

我正在用 C# 编写一个二进制 Powershell 模块,我想要一个带有参数的 Cmdlet,该参数提供动态的运行时选项卡完成。但是,我正在努力弄清楚如何在二进制模块中执行此操作。这是我试图让这个工作:

这行不通。我没有任何选项卡完成功能。我也收到一个错误:

我找到了一篇文章,其中包含如何在非二进制 Powershell 模块中执行此操作的示例。似乎在您包含的非二进制模块中,DynamicParam后面跟着构建和返回RuntimeParameterDictionary对象的语句。基于这个例子,我期望PSCmdlet类中的等价物,也许是一个可覆盖的GetDynamicParameters()方法或类似的东西,就像有一个可覆盖的BeginProcessing()方法一样。

以这种速度,二进制模块正在成为 Powershell 世界中的二等公民。当然有一种方法可以做到这一点,我错过了?

0 投票
1 回答
173 浏览

powershell - 在模块中使用时函数没有绑定

我试图把这个功能

成一个模块。我刚刚创建了一个新模块 my-scripts.psm1 文件,其中仅包含上述函数并使用Import-Module <absolute path>.

问题是如果我使用模块中的函数1..4 | Test-Any { $_ -gt 3 }返回false,因为$_没有设置为管道中的值。

如果我通常在脚本中定义函数并从那里使用它,它会按预期工作( $_ 被分配整数值)。

Windows 7 下的 PowerShell v4.0 会发生这种情况。

0 投票
1 回答
1539 浏览

powershell - 如何解决 PowerShell V5 中的模块嵌套限制已超出错误?

刚刚安装了管理框架 5 生产预览版,我的配置文件将不再加载并出现以下错误

Get-Module:无法加载模块“UserInfo.psm1”,因为已超出模块嵌套限制。模块只能嵌套到 10 层。评估并更改加载模块的顺序以防止超出嵌套限制,然后再次尝试运行脚本。

有没有办法获得更多细节?我试图用 跟踪执行set-psdebug -trace 2,但我看不到问题...

0 投票
2 回答
5159 浏览

powershell - 带有 Import-Module 的 Powershell 运行脚本

我为我的管理员组创建了一个模块,其中包含一些自动化我们通常执行的一些程序的功能(将管理员添加到远程机器、C 驱动器清理等......)

这些功能的先决条件之一是生成一系列 7 个凭据,一个用于我们工作的每个域。

有没有办法在导入模块时运行脚本块,或者这是我应该添加到每个人的个人资料中的东西?

一位评论者提到我可以将它添加到 module.psm1 文件中,但这不起作用。这是我要运行的代码。

手动运行它可以正常工作,但从 Import-Module 命令运行时不会创建凭据。

0 投票
1 回答
1072 浏览

.net - 通过使用 ps1xml 添加值为 System.Boolean = $false 的 NoteProperty 来扩展 PowerShell 自定义类型

我正在尝试使用自定义 types.ps1xml 文件扩展自定义对象的类型。该文件以我想要的方式工作并扩展了许多类型。

我已经能够使用布尔值为 $true 的 NoteProperty 扩展自定义类型。我现在想要做的就是将 NoteProperty 添加到另一个类型,其 TypeName 值为 System.Boolean,值为 $false。我的问题是该<value>属性始终被解释为字符串,并且当转换为 System.Boolean 的 TypeName 时,它​​总是返回 $true,因为任何非零长度字符串都返回 $true。

我正在手机上输入这个并急于回去工作,但 ps1xml 文件的相关部分是:

这会正确生成反映布尔值 $true 的 NoteProperty。但是,如果我将值更改为 false、或 0、或 null、或 ''、或 ""、或 $false、或 [bool] 0,或任何其他带或不带引号或带或不带 $ 或内部的可行值$() 或带有转义的引号或字符;它总是以 $true 的布尔值返回。如果我<Value>留空,它会在加载 xml 时给我一个错误,所以这也不起作用。如果我将 更改<TypeName>为其他内容,例如 System.IO.File 或其他任何内容,它实际上会将“false”的值转换为名为“false”的文件对象,或者我在<TypeName>. 很明显它按预期工作,除了我不能分配 $false 的布尔值。不管我做什么。如果我离开<TypeName>完全没有它默认为 System.String ,这对我没有帮助。

如果您查看文件或目录的 Get-Member,您将看到 PIsContainer 的相应 NoteProperty 等于 $true 或 $false 的 System.Boolean 值,具体取决于;当设置为 true 时,我的输出与默认目录对象完全相同。这表明应该可以将 NoteProperty 设置为 $false。

我差点忘了,但事实上,我可以使用 Add-Member 添加一个 NoteProperty 并将值正确设置为 $false,但是为了让我的脚本/工具正常工作,我需要这个对象的所有实例都具有这个 NoteProperty 等等使用 types.ps1xml 文件是我能想到的唯一方法。

请注意,我设置此属性的对象是一个自定义对象,它没有任何与该名称或值冲突或现有的属性。<Name>如果我把它改成别的东西也没关系,比如“IsAwesome”;它仍然不适用于 $false。我尝试在现有的 types.ps1xml 和 format.ps1xml 中搜索,但没有提示他们是如何做到的。我已经在网上广泛搜索了几天,甚至查看了一些关于 Powershell 的教科书,但无济于事。

有人可以帮帮我吗!?

0 投票
1 回答
1111 浏览

powershell - 将 import-module 与 PowerShell PSSnapin Dll 一起使用

我们有一个旧的 PowerShell PsSnapin (c#)。我想避免不得不使用InstallUtil. 以下导入了一个模块,其中导出了 PSSnapin cmdlet:

但是,当我运行模块 cmdlet 时,它们由于无法找到引用的程序集(特别是企业库 dll)而失败。

有没有一种巧妙的方法可以让这个工作?

(PsSnapin dll 和所有引用的程序集都在同一个构建目录中,当我使用 installutil 时,依赖关系都正确解析)

0 投票
1 回答
307 浏览

powershell - 具有自己清单的 Powershell 嵌套模块

我有一个关于模块清单的快速问题。我也可以为嵌套模块提供清单吗?让我解释:

我有 3 个模块,1 个是父模块,另外 2 个是子模块。父模块有一个清单,在“NestedModules”部分下定义了 2 个子模块。在我的主脚本中,我加载父模块并可以调用父模块和子模块中定义的成员。到目前为止,生活是美好的。

现在,如果我也为子模块添加清单文件,发现成为挑战,我的主脚本会抛出错误,例如

“无法识别术语‘functionName’

为子模块添加清单的理由是它们可能变得独立并且可以单独分发。

谢谢你的帮助!山姆

0 投票
2 回答
10710 浏览

.net - 如何在 Visual Studio 中调试 Windows PowerShell 模块?

我正在尝试使用 Visual Studio 2015 将 PowerShell 模块编写为 VB.NET 项目。我已经能够将一些命令放在一起,将类库编译为 DLL,将模块导入 PowerShell 会话并调用我创建的命令。到目前为止一切都很好。但是当我扩展这个模块时,我需要能够调试它。

所以我在解决方案中添加了另一个项目,一个控制台应用程序。我将其设置为启动项目,并在第一个项目中引用了 PowerShell 类。到目前为止,当我调用 PowerShell 函数时,我编写的所有工作都在EndProcessing()子例程中完成。我不能从我的控制台应用程序中调用它,因为它受到保护。

问题:我如何Get-TestCommand从控制台应用程序中正确调用我的 PowerShell 函数,以便 Visual Studio 知道我在触发我放入 Powershell 类库中的断点时引用的是单独项目中的代码而不是编译的 DLL?

0 投票
1 回答
16938 浏览

powershell - Powershell 命令“Get-DistributionGroup”不起作用

Get-DistributionGroup命令应该列出域中的通讯组,但我无法让它在我的服务器上运行。

经过一些谷歌搜索后,我发现Import-Module ActiveDirectory需要先运行,但是当我运行时我得到的是:

Import-Module:未加载指定的模块“ActiveDirectory”,因为在任何模块目录中都找不到有效的模块文件。

我的问题是

  1. 如何将此模块安装到我的 PowerShell 模块目录中?我认为它应该自动执行此操作
  2. 一旦我安装了它,我只是运行Import-Module ActiveDirectory然后我可以运行Get-DistributionGroup以列出我的 dist 组吗?
0 投票
1 回答
1668 浏览

powershell - Azure 自动化模块导入 - 如何调查未作为活动导出/提取的模块成员?

我有一个带有一些嵌入式工作流和本机 ps1 cmdlet 的自定义模块。

当我导入此模块时,只有一部分 cmdlet 显示为模块下的提取活动。

模块正在成功完成导入,并显示为可用。

是否有任何地方可以查找特定输出和任何可能的特定于成员的导入错误?

无法加载的 cmdlet 取决于作为程序集的一部分添加的一些新类型。正在加载的 cmdlet还取决于该程序集的类型。

更令人困惑的是,当我在 ISE 中本地导入此模块时,一切正常,并且所有 cmdlet 都可用/可执行。

进一步:我已经在 Native PowerShell cmdlet 中看到了这一点,但它看起来好像(单个)PowerShell Workflow activity inside a .ps1 is not supported

此外,我在本地看到,取决于是否使用 .psd1 或 .psm1 加载我的模块,我得到不同的行为和结果 WRT 依赖程序集加载。

特别是,当尝试在本地解决不一致问题时,我得到了一些“找不到类型”或“找到多个 1 arg 的 ctor 重载”(尽管所讨论的类型没有 1 的 ctor arg) 通过[OutputType([typename])]等引用的类型的错误,当发现其他依赖于 SAME 程序集的类型的 cmdlet 时就好了..

[编辑]
我的测试 .psm1 的本地详细输出

详细:导入功能“同步测试”。
详细:将命令导入为工作流“Sync-VsoGitRmRunbook”。

在 AA 中,sync-test(只是一个编写字符串输出的普通运行手册)显示良好,而 Sync-VsoGitRmRunbook 则没有。

如果我将同步测试转换为工作流,它也会停止导入,这让我相信导出捆绑为 .ps1 文件的工作流活动的模块存在限制(而不是打包在模块中的 C# 类)

[编辑]
我创建了一个重现问题的模块。 https://github.com/JoeBrockhaus/AzureAutomationVsoGitSync