C# 如何转义PowerShell提供程序返回的路径名

C# 如何转义PowerShell提供程序返回的路径名,c#,powershell,path,escaping,C#,Powershell,Path,Escaping,我正在编写一个用C#编写的PowerShell提供程序。提供程序公开一个对象树,对象树的名称是任意unicode字符串,可以包括字符,如“,”,等等 我正在努力理解如何正确地返回这些名称,但还没有找到任何文档说明如何返回这些名称 PowerShell路径如何转义和显示 路径或路径段是否有长度限制 是否有语法或正则表达式来验证PowerShell路径或路径段 两个项目具有相同的名称(因此具有相同的路径)是否合法?在我的场景中就是这种情况,名称不要求唯一。(有唯一的属性,例如ID,但名称不唯一。)

我正在编写一个用C#编写的PowerShell提供程序。提供程序公开一个对象树,对象树的名称是任意unicode字符串,可以包括字符,如
,等等

我正在努力理解如何正确地返回这些名称,但还没有找到任何文档说明如何返回这些名称

  • PowerShell路径如何转义和显示
  • 路径或路径段是否有长度限制
  • 是否有语法或正则表达式来验证PowerShell路径或路径段
  • 两个项目具有相同的名称(因此具有相同的路径)是否合法?在我的场景中就是这种情况,名称不要求唯一。(有唯一的属性,例如ID,但名称不唯一。)

  • 让我们看一下文件系统中的一个示例:
    
    PS>dir foo*
    目录:C:\Users\jimtru\AppData\Local\Temp
    模式LastWriteTime长度名称
    ----                -------------         ------ ----
    -a----2016年6月1日上午11点11分11福[酒吧].“巴兹”
    -a----2016年1月6日上午11点13分8福[酒吧]。`baz`
    
    首先要注意的是,有一些引号(单引号和反引号)是简单呈现的,没有额外的字符表示输出中的转义,但是,如果您只是尝试获取它们的内容,这些引号可能会导致PowerShell有点心痛:

    PS>get content foo[bar]。'baz'
    获取内容:指定路径foo[bar]处的对象。baz。。。
    PS>获取内容foo[bar]。`baz`。。。
    获取内容:指定路径foo[bar]az处的对象`
    

    有几种方法可以解决此问题。我们为一些cmdlet提供
    -LiteralPath
    
    PS>获取内容-文字路径“foo[bar]。“baz”
    sdflkj

    请注意,我在字符串周围包含了双引号。这是因为单引号将被视为字符串元素,因此
    'foo'
    将被
    foo
    替换,双引号表示解析器应该查看整个字符串(双引号到双引号)。另一种方法是使用转义字符(后引号)。
    
    PS>获取内容'foo`[bar`.'baz`'
    sdflkj
    

    对于相同的路径,我建议您避免这种情况。您需要某种方法来消除一个实体与另一个实体之间的歧义。您应该确保您创建的路径对于您的资源是唯一的。请记住,您在提供程序中构造了此路径,以便可以将消除歧义功能添加到提供程序中


    最后,在长度上有一些限制,可以用文件系统上的路径来表示“

    万一文档是1)希望路径转义只是关于如何输入字符串。如果不是,我想你必须在你的供应商那里处理这个问题。2) 我不认为提供者框架明确地限制了路径。4) 您的提供商必须了解如何处理此问题。当有两个项时,您将如何处理get item?@TravisPlunk,大约4)因为它们是对象,可以通过编程方式保存和过滤它们。它们确实具有唯一性,但唯一性不仅仅在于名称。例如,许多电子邮件可以具有相同的标题,但不同的基础唯一ID。电子邮件标题似乎自然地映射到PowerShell名称。我只是想确保这是在PuthBeSk中被接受的事情。@ TravisPlunk,考虑把你的评论改写为答案。大约1)在您提供的链接中,我没有找到任何关于转义路径分隔符的信息。我错过什么了吗?谢谢。路径中的路径分隔符(即/或\)如何?最初的文章是关于任意unicode路径的,因此需要知道提供者、cmdlet或脚本应该特别处理的字符集。