问题标签 [pscmdlet]

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 回答
825 浏览

c# - 如何使 PSCmdlet bool 参数像标志一样工作?

使用 System.Management.Automation,您可以在 C# 中创建自定义 PSCmdlet。现在,如果您像这样创建布尔参数:

您必须像这样调用 cmdlet:

但我想在不将值传递给-ShowDefinition 的情况下调用它。与 -Debug 的工作方式相同。像这样:

我怎样才能做到这一点?

0 投票
1 回答
808 浏览

c# - 检测 PowerShell 开关

我正在用 C# 开发一个 PowerShell cmdlet,并且有真/假切换语句。我已经注意到我需要指定 -SwitchName $true,如果我希望 bool 为真,否则我得到:

开关是这样装饰的:

我怎样才能检测到开关的存在(-SwitchName 设置为 true,没有 -SwitchName 表示 false)?

0 投票
2 回答
2941 浏览

c# - AppDomain.CurrentDomain.BaseDirectory 更改为错误目录

dllCmdlet命令创建了一个(参见 Get_DemoNames.cs)。从这里cmdlet我称之为方法UpdateXml(),到目前为止一切正常。但UpdateXml()如果文件不存在,也会创建文件。当我UpdateXml() 像这样调用类文件时:

我运行项目,它进入正确的目录。

但是,如果我加载导入的 dll 并DemoNames在单独的测试项目中运行命令,如下所示:

程序转到错误的目录,导致以下错误:

Get-DemoNames:拒绝访问路径“C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\beheer_extern\config”。在 line:1 char:10 + DemoNames <<<< + CategoryInfo : NotSpecified: (:) [Get-DemoNames], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,EF.XML.Get_DemoNames

我在网上搜索了这个错误,发现其他人可以通过将这一行添加到构造函数来解决它:

这给了我另一个错误的路径:

Get-DemoNames :拒绝访问路径“C:\Windows\system32\beheer_extern\config”。在 line:1 char:10 + DemoNames <<<< + CategoryInfo : NotSpecified: (:) [Get-DemoNames], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,EF.XML.Get_DemoNames

Get_DemoNames.cs

解析器.cs

如何获得项目的正确目录(www 目录)?

0 投票
0 回答
285 浏览

c# - PSHost PromptForChoice 格式 ChoiceDescription

在我的PSCmdlet课堂上,我要求用户使用PromptForChoice. 提示用户选择他想要使用的连接字符串。我无法给出ChoiceDescriptions正确的格式。

给我这个

连接字符串

选择您要使用的连接字符串

[0] 0数据源=.\SQLEXPRESS;集成安全=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户实例=true

[1] 1有效的连接字符串;

[2] 2Data Source=111.111.1.1;初始目录=Test;User id=User;Password=Password;MultipleActiveResultSets=true

[?] 帮助(默认为“0”):

如您所见,这些数字也在连接字符串文本中,这不是我想要的。

这就是我想要实现的目标:

[0] 数据源=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户实例=true

等等等等

因此,我需要将用户选择为int. 我怎样才能得到我想要达到的结果?

代码:

0 投票
2 回答
63 浏览

powershell - 扩展要在管道中使用的对象

我想扩展 VMware PowerCli cmdletGet-VM以在其字段中包含我的值并通过管道传递它。

例如,我想在对象中看到MyField1MyField2。这可以通过 ps1xml 文件来实现。

当我尝试使用管道中的字段时,我什么也没得到。

例如,在这里我将使用Select-Objectcmdlet,但这些都不是:

我怎样才能真正扩展一个对象,在我的情况下VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl具有一些扩展功能并将这些值传递给管道?

0 投票
1 回答
90 浏览

powershell - PowerShell cmdlet

我正在尝试编写一个 PowerShell cmdlet,它接受单个参数的多个输入。

例如,我可以轻松地执行以下操作:

但我想做这样的事情:

(或者)

我搜索了,但我找不到如何做到这一点。

我该怎么做?

0 投票
1 回答
206 浏览

c# - 在powershell中编写一个可调用的powershell类

使用 Cmdlet(和/或 PSCmdlet),我可以创建

然后,在powershell中,我可以调用命令

一切都很好。

但是我想创建一个而不是一个函数,这样我就可以获取一个对象,然后在 powershell 中使用它

就像是

以上可以在C#中完成吗?如果是这样,怎么做?

0 投票
1 回答
81 浏览

windows - 将 cmdlet 输出记录到具有日志记录功能的文件,而不使用 foreach

我有一个类似于以下示例的 cmdlet 来删除早于 x 天的文件和一个记录到文件的日志记录函数(写入日志):

我想要做的是记录 cmdlet 对每个处理的文件所做的事情。在正常的 foreach 循环中,我会添加类似这样的内容来记录该过程

如何使用我的日志记录功能和上述 cmdlet 记录所有操作?

0 投票
0 回答
279 浏览

c# - C# Powershell Cmdlet:调用另一个 cmdlet

我在 C# 中创建了一组 PowerShell cmdlet。

现在我有一个 cmdlet 可以重用另一个的代码。

在 Powershell 中这很容易,因为我可以使用参数调用 cmdlet,但是有没有办法在 C# 中调用它?完整的逻辑在BeginProcessing()//实现中实现,基本上返回ProcessRecord()/使用所以我认为不可能(?)。EndProcessing()voidWriteObject()

如果我是对的 - 处理这个问题的正确方法是什么?我是否应该从方法中提取基本代码BeginProcessing()并将其放入单独的方法中以使其可用?

任何反馈表示赞赏,乔尔

0 投票
2 回答
621 浏览

c# - Cmdlet 详细流

我目前正在使用 PowerShell 5.0 SDK 编写 C# cmdlet。

当从powershell“实时”运行时,我正在尝试将第三方可执行文件的StandardError通过管道传输到cmdlet输出。

我目前正在使用 MedallionShell 库来处理运行该过程。我已经使用普通的 C# win 表单进行了尝试,并使用 Command.StandardError.PipeToAsync(Console.OpenStandardOutput()) 来获取要打印的输出,因为可执行文件“实时”将其生成到控制台。

我尝试创建自己的调用 WriteVerbose 的 Stream 对象,但它似乎没有在 powershell 屏幕上打印任何内容(我在运行时将 -Verbose 传递给 cmdlet)。

我当前的流程看起来像这样:

  1. 打开 Powershell ISE
  2. 加载我的模块(C# dll)
  3. 使用参数调用我的 cmdlet
    • 命令运行
    • Command.StandardError.PipeToAsync(???)
    • Command.Wait(在此步骤中,输出应流向 powershell 窗口)
    • 检查命令.结果.成功。

谁能指出我正确的方向?