C#Cmdlet调用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

我正在编写一个c#cmdlet,需要使用Get-ChildItems PowerShell cmdlet。 Nee

如何从代码中调用此cmdlet,而不调用“字符串PowerShell命令”?基本上,我尝试调用c#GetChildItem代码

[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是的,当我重读它时,我也能理解它^发布了一个答案