问题标签 [cmdlet]

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 投票
3 回答
4234 浏览

c# - 如何将 .cs 文件转换为 PowerShell cmdlet?

谁能帮我将 C# .NET 程序转换为 PowerShell cmdlet?我对这个领域很陌生。请帮助我离开这个检查站!

问候,

阿伦

0 投票
6 回答
10398 浏览

powershell - 如何创建一个cmdlet?

我已经用 c# .net 编写了我的程序。我想将其转换为 powershell cmdlet。我被指示使用 pssnapin 和 getproc 程序。任何人都可以帮助我..

问候阿伦

0 投票
3 回答
12100 浏览

c# - 从 C# 以编程方式调用 CmdLet 时如何捕获 Powershell CmdLet 的详细输出

背景

  • 我在 Windows 7 上使用 Powershell 2.0。
  • 我正在 Powershell 模块中编写一个 cmdlet(“模块”是 Powershell 2.0 的新功能)。
  • 为了测试 cmdlet,我正在 Visual Studio 2008 中编写以编程方式调用 cmdlet 的单元测试。

参考

  • MSDN 上的这篇名为“如何从 Cmdlet 中调用 Cmdlet”的文章展示了如何从 C# 调用 cmdlet。

源代码

  • 这是我的实际代码的精炼版本——我已经把它做得尽可能小,这样你就可以清楚地看到我遇到的问题:

    /li>

注释

  • 我了解如何从 Powershell 命令行启用和捕获详细输出;那不是问题。
  • 在这种情况下,我以编程方式从 C# 调用 cmdlet。
  • 我发现没有任何东西可以解决我的具体情况。一些文章建议我应该实现自己的 PSHost,但似乎很昂贵,而且似乎必须将 cmdlet 作为文本调用,我想避免这种情况,因为它不是强类型的。

2009-07-20 更新

这是基于以下答案的源代码。

有些事情我仍然不清楚: * 如何调用“Get-Colors” cmdlet(理想情况下不必将其作为字符串传递给 ps 对象) * 如何在生成时获取详细输出而不是获取最后收集它们。

上面的代码生成这个输出:

2010-01-16 更新

通过使用 Powershell 类(在 System.Management.Automation 中找到,但仅在 powershell 2.0 SDK 附带的程序集版本中,而不是在 Windows 7 上开箱即用的版本中)我可以以编程方式调用 cmdlet 和得到详细的输出。剩下的部分是实际向该 powershell 实例添加一个自定义 cmdlet——因为这是我最初的目标——对我的 cmdlet 进行单元测试,而不是那些带有 powershell 的。

0 投票
1 回答
559 浏览

c# - 如何持久保存 Powershell 提供程序驱动器信息?

在我的 Powershell 提供程序中,它是 SQL 数据库上的业务逻辑层,Powershell 驱动器等同于数据库连接设置。此连接设置集合保存在本地计算机上的加密 XML 文件中。管理员可以在计算机上添加这些 PS 驱动器,提供 SQL Server 凭据,供其他 Powershell 用户在编写脚本时使用。当管理员运行 New-PSDrive 时,我将一个驱动器添加到集合中并将其保存到 XML。当他们 Remove-PSDrive 时,我从持久 XML 中删除了驱动器。这工作正常。但是,当 Powershell 主机退出时,它会为每个现有驱动器调用 RemoveDrive()。在这一点上,我不想删除驱动器,因为我需要它们保留在计算机上。

如何确定是手动执行 Remove-PSDrive 的用户调用了 RemoveDrive(),还是主机退出了?

此外,我创建了运行良好的自定义驱动器信息参数,但我还编写了一个自定义 cmdlet,用于添加和删除驱动器。如何从我的 cmdlet 创建(和删除)psdrive?

0 投票
2 回答
1570 浏览

powershell - 编写 PowerShell cmdlet 以接受脚本块作为参数

Rename-Item 接受一个脚本块(我认为......)作为参数,所以如果我想重命名一堆文件(例如),我可以这样做:

我正在编写一个 cmdlet 来重命名某些项目,并且希望能够将这样的语法用于新名称,但是如何声明参数以接受这样的脚本块或简单的字符串?

0 投票
1 回答
995 浏览

powershell - 我应该为 PowerShell Cmdlet 实现 IPropertyCmdletProvider 接口吗?

我正在为 PowerShell 编写NavigationCmdletProvider。通过GetItemGetChildItems覆盖,可以将各种类型的对象写入管道。

IPropertyCmdletProvider接口的文档告诉我们以下内容:

开发者应在以下条件下实现该接口:

  • 当用户必须使用诸如 Get-Property 和 Set-Property cmdlet 之类的 cmdlet 时。
  • 对于从 ItemCmdletProvider、ContainerCmdletProvider 或 NavigationCmdletProvider 类派生的提供程序。

困惑:

我认为没有很多有用的信息,因为用户如何知道他们是否必须使用 Get-Property 和 Set-Property cmdlet?我想这取决于 Cmdlet 作者。最大的困惑(至少对我而言)是 Cmdlet 是否将对象写入管道;并且这些对象具有可调用的公开属性(即获取/设置);调用 Get-Property/Set-Property 比直接操作对象有什么好处?

问题:

什么情况下应该实现IPropertyCmdletProvider接口?

我知道我在这里遗漏了一些东西!任何见解将不胜感激。

0 投票
2 回答
6789 浏览

powershell - Export-Mailbox cmdlet 不删除电子邮件

我在 Powershell 中使用 Export-Mailbox cmdlet 从邮箱中删除两个日期之间的电子邮件时遇到问题。我正在运行的当前代码是:

我知道这两个日期之间有电子邮件,但是每次命令运行并完成时,都会显示“步骤中发生错误:移动消息。无法将消息复制到目标邮箱存储并出现错误:未知发生错误。”

有没有人成功使用 Export-Mailbox 删除邮件,或者知道为什么会出错?

谢谢。

  • 强尼

~~~解决方案~~~

在 David 的帮助下,我再次运行了命令,如下所示:

只要在那个时间跨度内没有超过 3000 封电子邮件,这种方法就有效。

0 投票
3 回答
1439 浏览

powershell - 如何在管道上的 cmdlet 之间传递常用的 powershell 命令行参数?

假设我有两个 cmdlet,“new-foo”和“do-bar”。两个 cmdlet 都需要对服务进行身份验证才能执行它们的操作,并且 'do-bar' 需要一个 foo。今天,我可以做到:

我可以这样做:

我什至可以将它们链接到管道上传递 foo ,例如:

但我不知道如何传递公共参数,例如服务位置和管道元素之间的凭据。如果我有一堆我的 cmdlet 链接在一起,我只想在第一次传递凭据,然后在管道的其余部分重新使用这些凭据。

我错过了什么,似乎这应该很明显......

0 投票
2 回答
7505 浏览

design-patterns - Powershell脚本:在嵌套函数调用时推荐的实现ShouldProcess的方法?

测试脚本:

输出:

在我看来,这里有几个奇怪的地方:

  • 指定 -WhatIf:$foo 将始终在被调用者(及其被调用者)中打开 $WhatIf,无论 $foo 是什么。
  • 当您指定 -WhatIf “for real”(不将其限制为现有变量)时,它会隐式传播到被调用者。无需通过或飞溅。
  • 与 -WhatIf 不同,显式 -Verbose 不会隐式级联到被调用者。
  • 当您尝试手动通过 -Verbose:$foo 时,您确实看到行为类似于 -WhatIf:$foo。但它只影响手动测试 $psCmdlet.ShouldProcess() 的脚本——内置 cmdlet 不受影响。

注意:Confirm 的行为与 WhatIf 相同。为简洁起见,我省略了它。

搜索网络和连接,我几乎看不到任何关于与高级功能有关的 ShouldProcess 行为(赞成或反对)的深入讨论。最接近的是James O'Neill 的一篇文章,它建议在整个调用堆栈中传递一个 $psCmdlet 实例。然而,他这样做是为了解决一个完全不同的问题(避免多次 -Confirm 提示)。同时,当您坚持使用为每个函数提供的标准 $psCmdlet 时,我看不到有关预期结果的文档……更不用说设计模式、最佳实践等……

0 投票
2 回答
7156 浏览

powershell - PowerShell 高级函数获取当前 ParameterSetName

在 C# 中,您可以使用以下代码在 PowerShellParameterSetNameProcessRecord覆盖中获取电流Cmdlet

我试图弄清楚如何ParameterSetName在脚本 cmdlet(高级功能)中获取值。