- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 powershell 中,某些参数具有动态自动完成行为。例如,Get-Process 参数名称。我可以使用 TAB 遍历所有流程。
我想在我的 PSCmdlet 中使用此行为。
但问题是,我只知道如何使用静态自动完成值来做到这一点。看例子:
public class TableDynamicParameters
{
[Parameter]
[ValidateSet("Table1", "Table2")]
public string[] Tables { get; set; }
}
这是一个如何使用原生 powershell 完成的示例 http://blogs.technet.com/b/heyscriptingguy/archive/2014/03/21/use-dynamic-parameters-to-populate-list-of-printer-names.aspx
有效感谢@bouvierr
public string[] Tables { get; set; }
public object GetDynamicParameters()
{
if (!File.Exists(Path)) return null;
var tableNames = new List<string>();
if (TablesCache.ContainsKey(Path))
{
tableNames = TablesCache[Path];
}
else
{
try
{
tableNames = DbContext.GetTableNamesContent(Path);
tableNames.Add("All");
TablesCache.Add(Path, tableNames);
}
catch (Exception e){}
}
var runtimeDefinedParameterDictionary = new RuntimeDefinedParameterDictionary();
runtimeDefinedParameterDictionary.Add("Tables", new RuntimeDefinedParameter("Tables", typeof(String), new Collection<Attribute>() { new ParameterAttribute(), new ValidateSetAttribute(tableNames.ToArray()) }));
return runtimeDefinedParameterDictionary;
}
最佳答案
来自 MSDN:How to Declare Dynamic Parameters
您的 Cmdlet
类必须实现 IDynamicParameters
接口(interface)。这个界面:
Provides a mechanism for a cmdlet to retrieve parameters that can be added dynamically by the Windows PowerShell runtime.
编辑:
IDynamicParameters.GetDynamicParameters()
方法应该:
return an object that has properties and fields with parameter related attributes similar to those define in a cmdlet class or a RuntimeDefinedParameterDictionary object.
如果你看这个link ,作者是在 PowerShell 中这样做的。他在运行时创建:
ValidateSetAttribute
的新实例,带有一个运行时可能值数组RuntimeDefinedParameter
,并为其分配了 ValidateSetAttribute
RuntimeDefinedParameterDictionary
您可以在 C# 中执行相同的操作。您的 GetDynamicParameters()
方法应返回此 RuntimeDefinedParameterDictionary
,其中包含适当的 RuntimeDefinedParameter
。
关于c# - PSCmdlet 动态自动完成参数(如 Get-Process),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25823910/
我有一个用 C# 和 .NET 3.5 编写的 PSCmdlet,它调用在同一 Cmdlet 中定义的一些其他命令。 其中一个命令会启动对我的 SharePoint 网站的全面爬网并等待它完成。乐观地
考虑以下人为的示例: function Test-ProcessContinue { [CmdletBinding(SupportsShouldProcess=$true, ConfirmIm
我有一个完全用 C# 编写的 PS 模块。它包含大约 20 个已投入生产的 Cmdlet。其中一些“共享代码”。举个例子: 我有一个名为 InvokeCommitCommand 的 Cmdlet产生一
使用 System.Management.Automation,您可以在 C# 中创建自定义 PSCmdlet。现在,如果您像这样创建 bool 参数: [Parameter()] public bo
在 PowerShell 中,throw $ErrorMsg 和 $PScmdlet.ThrowTerminateError($ErrorMsg) 之间有什么区别? 它们是相同还是不同?如果它们不同,
在 powershell 中,某些参数具有动态自动完成行为。例如,Get-Process 参数名称。我可以使用 TAB 遍历所有流程。 我想在我的 PSCmdlet 中使用此行为。 但问题是,我只知道
我正在编写一个脚本来创建虚拟机,显然我想支持标准的确认/whatif 语义。但是,如果我要创建多台机器,最好能区分"is"和“全部是”,这样我就不必重新确认每台机器。 $pscmdlet.Should
我正在尝试使用 Citrix 的 XenDesktop SDK 编写一个 Web 应用程序来管理我们的 XenDesktop 环境。 作为快速测试,我引用了 Citrix BrokerSnapIn.d
我正在用 C# 编写 Cmdlet。 在某些时候我想要像 PowerShell 命令这样的彩色输出: Write-Host "Message" -ForegroundColor Green 我的 C#
我是一名优秀的程序员,十分优秀!