如何给用户输入自定义powershell cmdlet从另一个项目
本文关键字:cmdlet 另一个 项目 powershell 自定义 给用户 输入 | 更新日期: 2023-09-27 18:11:48
我有一个单独的测试项目来测试我的cmdlets项目,该项目有如下调用:
pSCmdletObject.InvokeCommand.InvokeScript("Write-Host " + outputString); and
pSCmdletObject.InvokeCommand.InvokeScript("Read-Host");
我已经使用了PSHostUserInterface, PSRawUserInterface, PSHost实现示例C:'Program Files (x86)'Microsoft sdk 'Windows'v7.0'Samples'sysmgmt'WindowsPowerShell'csharp'Host03
问题是:
TestClass.cs (Test项目):
using (Runspace runSpace = RunspaceFactory.CreateRunspace(new Host(new TestClass())))
{
runSpace.Open();
using (Pipeline pipeline = runSpace.CreatePipeline())
{
pipeline.Commands.Add("CustomCommand-Get");
var output = pipeline.Invoke(); //<<< (1)
}
}
在"(1)"处,当调用"Invoke"时,调用实际项目中编写的"CustomCommand"实现。在实际cmdlets项目的"CustomCommand"的"ProcessRecord()"中,当调用"Read-Host"时,该项目只是等待我目前无法提供的输入,因为我无法找到一种方法。我的测试项目有Invoke调用,我想避免使用控制台。我想根据测试用例对输入进行硬编码,因为实际的Custom Cmdlet项目是一个完全不同的项目,可以独立运行。这能做到吗?如果有,怎么做?还有别的办法吗?
Thanks in advance
如果你有一个自定义的主机实现,那么你可以修改主机impl来创建一个测试主机impl,在那里你可以让PSHostUserInterface.Prompt()
和PSHostUserInterface.ReadLine()
在调用这些方法时返回你想要的任何东西。这些方法(加上PSHostUserInterface.ReadLineAsSecureString()
)被Read-Host
调用来从主机(最终用户)读取字符串。