C#Cmdlet调用GetChildItem
我正在编写一个c#cmdlet,需要使用Get-ChildItems PowerShell cmdlet。 Nee 如何从代码中调用此cmdlet,而不调用“字符串PowerShell命令”?基本上,我尝试调用c#GetChildItem代码C#Cmdlet调用GetChildItem,c#,powershell,cmdlets,C#,Powershell,Cmdlets,我正在编写一个c#cmdlet,需要使用Get-ChildItems PowerShell cmdlet。 Nee 如何从代码中调用此cmdlet,而不调用“字符串PowerShell命令”?基本上,我尝试调用c#GetChildItem代码 [Cmdlet(VerbsCommon.Get, "SampleCmdlet")] public class GetSampleCmdlet : Cmdlet { [Parameter()] public string Parameter1
[Cmdlet(VerbsCommon.Get, "SampleCmdlet")]
public class GetSampleCmdlet : Cmdlet
{
[Parameter()]
public string Parameter1 { get; set; }
protected override void ProcessRecord()
{
//Call c# Get-ChildItem and do something with results
//Don't want to do somthing like:
//string stringCommand = "Get-ChildItem 'c:\\*.Txt'";
//InvokePowerShellCommand(stringCommand);
}
}
我只需要FileSystemProvider,但它应该是一种直接调用GetChildItem cmdlet的方法。如果扩展
PSCmdlet
而不是cmdlet
,则可以通过InvokeProvider
属性访问当前提供程序:
如果您的Cmdlet需要访问MSH运行时(例如,
会话状态中的变量、对主机的访问权限或信息
关于当前Cmdlet提供程序,),则应改为派生
从PSCmdlet基类
您可以通过以下方式调用Get-ChildItem
provider cmdlet:
InvokeProvider.ChildItem.Get(@"C:\path\to\dir", false);
我不确定这是否真的可能。。但是为什么不使用位于System.IO.Directory中的静态EnumerateDirectory()和EnumerateFiles()方法呢?如果需要文件信息,则可以创建System.IO.FileInfo对象(对于目录,也可以这样做)。基本上,Get-ChildItem cmdlet也是这样工作的。也许可以改为扩展
PSCmdlet
,然后调用InvokeProvider.ChildItem.Get(字符串路径,布尔递归)
?@bluf,实际上不是相同的函数。不想实现“c:*\folder**.txt”支持,包括、排除等@MathiasR.Jessen做得好!我测试了newfilesystemprovider().InvokeProvider.ChildItem.Get(“d:\\\*.txt”,false)
和Cmdlet不起作用,但您的提示起到了作用。限制是我不能在常规的c#应用程序中使用这个类,只是为下一个读者编写它。你能给我一个小的答案,这样我就可以验证它了。对不起@MathiasR.Jessen我可能有点困惑。你的建议行得通,我只是说了我在你回答之前测试过的东西。因此,执行PSCmdlet并调用InvokeProvider.ChildItem.Get(字符串路径,布尔递归)
是我要验证的答案。请只做一个常规的回答(不是评论),这样我就可以验证它了。@Manea是的,当我重读它时,我也能理解它^发布了一个答案