问题标签 [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.
c# - 如何定义不需要参数的参数集(PS cmdlet)?
我要定义三个参数集
- cmdletName - param1 (ParameterSet1)
- cmdletName - param1 -param2 (ParameterSet2)
- cmdletName(这没有任何参数)(ParameterSet3)
我怎样才能做到这一点?
这就是我当前的代码的样子。
powershell - 如何在 PowerShell cmdlet 中显示一个属性本身是复杂对象的对象
我有一个输出用户定义对象的 cmdlet Metric
。
Metric
类有数据成员:
Count
- 类型int16
Dimension
- 类型List<MetricDimension>
MetricDimension
是具有数据成员的用户定义对象:
Name
- 类型String
OperatorProperty
- 类型String
Values
- 类型List<String>
当我输出我的 Metric 对象时,会显示以下输出。
我想要的是它应该显示对象 ( MetricDimension
) 的完整详细信息,包括OperatorProperty
&Values
列表,而不仅仅是Name
.
是否可以显示维度对象的每个属性?
function - Powershell Cmdlet.ShouldProcess 方法默认答案
我有一个 powershell 脚本,我在其中实现了具有高 ConfirmImpact 的 should process 方法,以确保出现提示。
提示按预期工作,但未输入任何内容时的默认响应为“Y”
有没有办法将默认响应更改为“N”?如果用户想要应用脚本,我希望用户必须明确输入 Y。我已经编写了一个相当繁重的脚本,我想要的最后一件事是让脚本用户直接按 Enter 键而不验证他们将其应用于什么。
我已经阅读了有关它的文档,并且在任何地方都没有提到这一点。
powershell - Clear-RecycleBin cmdlet 的进度条输出显示不正确
我是第一次使用Clear-RecycleBin
cmdlet,很明显,这个 cmdlet 描绘了一个典型的命令行进度条,我认为它应该从头到尾填充符号或色块,或者它应该只是打印条中间的百分比值,我不知道确切的原因,因为正如我所说的是我第一次使用这个 cmdlet,但是,看到下面的图像,它明显的进度条输出是错误的。进度条完全是“静态的”,它不会填满进度条,它只是(一次)打印几个字符,并且不会继续打印更多字符,如下图所示:
我通过将数千个文件发送到回收站来多次测试 cmdlet,这样我强制 cmdlet 花费时间(以分钟为单位)来完成回收操作,我注意到经过多少时间并不重要,而此 cmdlet 正常工作,进度条输出始终相同。仅打印该数量的“o”字符,并且它们会立即打印,而不是逐步打印。
我想这可能是某种输出编码问题,否则这个奇怪的进度条输出对我来说似乎是莫名其妙的......
我不确定出了什么问题。这是我运行此 cmdlet 的方式:
我的问题是:为什么我有这个输出,我该如何解决?
c# - 从 PSCmdlet 类 (C#) 在主机 Powershell 中调用原始命令
我正在玩 PSCmdlet 类。
有没有办法可以在执行我的命令的主机 powershell 中调用命令?
例如:
我想做一个函数来设置一些别名。
我试图举例Powershell.Create()
,AddCommand()
但没有为我工作。
提前致谢!
powershell - PowerShell Cmdlet 开发:关于在 Cmdlet 之间通过管道传输的 IEnumerable 的最佳实践
假设您有两个 Cmdlet:第一个返回输出,第二个使用该输出作为输入参数。
Cmdlet2 将以这种方式被调用多次(对于 Cmdlet1 返回的 IEnumerable 中的每个元素一次),您可以很好地将它们通过管道连接在一起:选择对象-前 10 | Cmdlet2 只有 Cmdlet1 输出的前 10 个元素被发送到 Cmdlet2。
因为 Cmdlet2 需要一些时间,所以显示进度会很好。目前我们不能这样做,因为我们只能一一接收输入字符串。我们把 Cmdlet2 的输入改成 List
我们仍然一一获取输入字符串,因为 Cmdlet1 中的 WriteObject 调用具有 true 作为第二个参数,允许 PowerShell 将结果枚举到单个对象。如果我们将其更改为 false,PowerShell 不会枚举结果,并且 Cmdlet2 会获取整个字符串列表作为输入,我们可以对所有字符串进行操作并显示一个漂亮的进度条。
但是:现在我们不能再轻易地管它们了。Cmdlet1 | 选择对象-前 10 | Cmdlet2 现在将整个输入发送到 Cmdlet2!Select-Object 不采用前 10 个,因为只有 1 个元素是 IEnumerable,并且该元素完全发送到 Cmdlet2!
处理这种情况的正确方法是什么?
c# - 从基于 C# 的 PSCmdLet 调用 CmdLet,提供输入和捕获输出
我正在构建一个用于出色打印的 Powershell CmdLet。它的功能应该与winprintOut-Print
的所有花里胡哨的功能一样。
为此,我需要获取InputObject
我的实现的输入流 ( )PSCmdLet
并将其传递,Out-String
因此它全部被扩展和格式化。我在想最好的方法是使用CommandInvocationIntrinsics.InvokeScript
to invoke out-string
,它应该给我一个字符串的输出......
假设我像这样调用了我的 cmdlet:
如果我理解这应该如何工作,那么text
上面的 var 应该是 astring
并且WriteObject
call 应该显示out-string
将显示的内容(即 的结果get-help out-winprint -full
)。
然而,实际上text
是string[] = { "" }
(具有一个元素的字符串数组,一个空字符串)。
我究竟做错了什么?
c# - c# - How to get the PowerShell module version from inside the module code at runtime
I have a C# PSCmdlet class for implementing a PowerShell command and I want to get my module version while running the command.
I don't want to get the version from the assembly location because I need the actual version loaded (it can be different, for example, if I keep PowerShell open while upgrading my module, the assembly will point to the upgraded version and I won't get the one that already loaded).
I need something like Get-Module for the current session but from my C# command code.
How can I do it?
c# - 静态检测当前正在运行的 CmdLet
我有一个基础的 PowershellCmdLet
类,它构建了一个static IServiceProvider
. 从这个抽象派生的类CmdLet
然后利用IServiceProvider
for DI。因为IServiceProvider
is ,它会在每个 Powershell sessionstatic
中构建一次,而不是每次执行任何派生的 CmdLet 时。
各种服务包括一个带有Microsoft.Extensions.Logging.ILogger
. 我希望这些服务发出的日志在 Powershell 会话中发出。例如,当ILogger.LogTrace()
被调用时,我希望将其传递给CmdLet.WriteVerbose()
方法。
我CmdletLogger
按照这些思路创建了一个类:
我想通过 提供一个CmdletLogger
可用的IServiceProvider
,但我不知道如何检测当前正在运行CmdLet
的CmdletLoggerProvider
类:
我意识到我可以制作IServiceProvider
非静态的,并在连接日志记录时将其传递CmdLet
给类,但是为单个会话中执行的每个执行CmdletLoggerProvider
重新构建的性能影响......不值得。IServiceProvider
CmdLet
Powershell
我希望 Powershell 有类似的东西IHttpContextAccessor
,但我一直没能找到这样的东西。
作为参考,抽象CmdLet
类如下所示:
c# - 发布带有 Powershell 模块清单的 C# CmdLet
我们有大量的 Powershell 函数,它们是用 Powershell 编写的,并使用具有以下行的 Powershell 清单文件发布:
WhereModule1.psml
循环并导入我们所有的函数:
我们现在有一个 C# cmdlet 公开 1 个函数,我们需要将其作为其中的一部分发布。c# cmdlet 在 bin 目录中包含“Cmdlet1.dll”。
使用模块清单发布这个新 dll 的正确方法是什么,以便在我们导入 Module1 时,我们也从 Cmdlet1 中获取函数?
感谢您的任何帮助!