问题标签 [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# - 单元测试 NavigationCmdletProvider 的 NewDrive 方法
我正在尝试为NewDrive
实现NavigationCmdletProvider
抽象类的类的方法创建单元测试:
不幸的是,我似乎找不到创建ProviderInfo
实例的方法,因为它是 FooProvider 的受保护属性。
我错过了什么?
powershell - 如何避免 WriteVerbose/WriteObject 坏线程
我已经创建了一个包含五个或六个 PSCmdlet 的 .NET 程序集。它们都是管道 cmdlet——即它们在 BeginProcessing 中设置,并在 ProcessRecord 中完成工作。他们打电话到图书馆。我在整个库中使用“Trace.WriteLine”来跟踪正在发生的事情。
我认为只创建一个 Trace 侦听器并将其写入 WriteVerbose 会非常酷。
但是,这会导致崩溃:
我花了一段时间才弄清楚发生了什么。我想我明白了,但还不知道如何解决它(至少,不容易)。
- Get-GridJobInfo 获取一些信息并调用 WriteObject
- 由于这是流水线的,因此会调用 Invoke-GridJob 中的 ProcessRecord。
- Invoke-GridJob 有 -Verbose,所以它安装了一个 Trace 监听器。
- Invoke-GridJob 调用 WriteObject。
- Powershell 运行时“恢复”Get-GridJobInfo 以使其生成下一个管道对象。
- Get-GridJobInfo 中的某处“Trace.WriteLine”
- 这会触发调用 WriteVerbose 的跟踪侦听器。
- 发生错误是因为我们当前在 Get-GridJobInfo 中,并且我们尝试在 Invoke-GridJob PSCmdLet 对象上调用 WriteVerbose。
这个问题是 TraceListener 是一个全局的东西,因此在 Invoke-GridJob 的 ProcessRecord 内部和外部被调用。所以问题就变成了:如何最好地检测进出?
我的第一个想法是检查 CurrentThreadId - 但事实证明这不起作用 - PS 尽可能地将事情保持在同一个线程上。
接下来,我想如果我可以在 PowerShell 中访问一个全局变量,它会告诉我当前正在执行什么命令——然后我可以将它与我应该编写详细消息的那个进行比较。但是,我一直没能找到这样的东西(你可以在调试器中找到它:PSCmdLet.Context.CurrentCommandProcessor)。
由于没有实现某种跟踪方案并将对象深入到调用堆栈上的库中进行回调,我不确定我能做什么。
提前谢谢了!
c# - 远程 powershell 中的自定义 cmdlet 条目
几天来,我一直在尝试将我的自定义 cmdlet 添加到 C# 中远程 powershell 的运行空间中
我有类似的东西可以在远程机器上执行脚本。但我需要添加一个自定义 cmdlet。
我知道使用本地 powershell 您可以像这样使用 InitialSessionState:
GetCustomCommand 扩展 PSCmdlet 的地方。
但是使用远程 powershell,您无法使用 InitialSessionState 初始化运行空间。如何将 SessionStateCmdLetEntry 添加到我的远程运行空间?
有人可以帮助我吗?谢谢
c# - 实施 Get-Help PSCmdlet
我正在使用 C# 中的 PSCmdlet 类编写 PowerShell Cmdlet。
我想在 Get-Help Get-Employee 的 Remarks, Description, Synopsis 部分提供更多信息
任何人都知道如何添加/填充这些部分?
c# - 使用 ValueFromPipelineByPropertyName 时如何获取原始管道对象?
我正在用 C# 构建一个 Cmdlet。
使用 绑定参数时ValueFromPipelineByPropertyName=true
,我经常想将绑定属性的原始管道对象传递回管道。如何获得对这个原始对象的引用?
所以如果这是我的 cmdlet
我希望能够在我的脚本中做到这一点
c# - 从脚本端设置时,Powershell C# Commandlet 无法获取 DataTable
关于DataTable
从Powershell
Script设置Commandlet
为C#
. 我不知道为什么一个正确构造DataTable
的被推送为一系列DataTableRow
数据而不是完全打包DataTable
。这阻碍了我进一步处理任何事情。下面是 C# commandlet
。
以上System.Data.Row
将等于数据表中包含的数据行数。我不能将DataTable
其设置为参数类型,因为我还必须设置所有标准数据类型值DataTable
。
下面是Powershell
脚本。
如何解决这个问题?
unit-testing - 使用 C# 进行 PowerShell pscmdlet 单元测试
需要一些帮助来了解如何对我正在创建的 PowerShell 模块进行单元测试。
我正在使用 PowerShellStandard.Library 包来创建一些 cmdlet。我的命令源自 pscmdlet 而不是 cmdlet,因为我确实需要操作 SessionState 变量。
我创建了一个新的单元测试项目,并搜索了一些教程(例如https://www.hanselman.com/blog/TestingPowerShellScriptsWithNUnit.aspx),我发现我确实需要使用 Runspace 类才能执行pscmdlet。问题是下面的命令总是返回一个空运行空间:
有人最近在尝试这些并且有任何想法吗?
c# - 编写 C# PowerShell cmdlet - 如何将调试日志输出到 TeamCity 调用者
我正在用 C# 编写一个 PowerShell cmdlet,我需要在脚本中添加一些诊断日志记录,以便我可以通过 TeamCity 评估行为。在为函数启用标志的情况下尝试了 WriteVerbose -Verbose
,没有任何内容记录到 TeamCity。
cmdlet的Write-Host等价物是什么?
以下 cmdlet 之间有什么区别:
- 写命令详细信息
- 写进度
- 写详细
- 写调试
- 写警告
- 写错误
- 写对象
azure - Azure powershell cmdlet throws "An error occurred while sending the request."
I'm trying to create a VM using below cmdlet in Azure powershell.
This cmdlet seems to work for most of the time , but sometimes gives the below error.
This error meesage doesn't have any relevant information as to why exactly this is failing.
I try to run the cmdlet for few times and it works again. I don't seem to understand why this doesn't work sometimes even though there is no change in the script.
There are few other cmdlets which has the same issue. But for example sake I have mentioned only one.
Any inputs are highly appreciated.Thanks
c# - Cmdlet C# 完成
因此,我正在使用 C# 中的 cmdlet,并使用派生自 PSCmdlet 的基本 cmdlet。
像这样:子 <- 父 <- PSCmdlet。
我们使用 Parent cmdlet 中的方法登录到系统。但有时事情并不总是顺利进行,出现异常、崩溃等。所以它并没有真正正确地注销。
我的问题如下:是否存在我可以在 Parent cmdlet 中实现/覆盖的方法,无论发生什么情况都会运行,以便我们可以正确注销?有点像最后尝试。我已经检查了 EndProcessing() 和 StopProcessing() 但在不可预见的情况下它们并不能真正完成任务。
编辑:为了澄清,有多个 cmdlet,情况不仅仅是登录。根据代码和用户输入,可能会发生多种异常。