我正在编写用C#编写的PowerShell提供程序。提供程序公开一个对象树,其名称是任意unicode字符串,可以包含"
,'
等字符。
我试图了解如何正确返回这些名称,但未能找到有关如何执行此操作的任何文档。
答案 0 :(得分:1)
让我们看一下文件系统中的一个例子:
PS> dir foo*
Directory: C:\Users\jimtru\AppData\Local\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/1/2016 11:11 AM 11 foo[bar].'baz'
-a---- 6/1/2016 11:13 AM 8 foo[bar].`baz`
首先要注意的是有引号(单个和后退),它们只是简单地呈现,没有其他字符表示输出中的擒纵机构,但是,如果你只是试图获取它们的内容,这些可能会导致PowerShell有点胃灼热:
PS> get-content foo[bar].'baz'
get-content : An object at the specified path foo[bar].baz...
PS> get-content foo[bar].`baz`...
get-content : An object at the specified path foo[bar]az`
有很多方法可以解决这个问题。我们为某些cmdlet提供-LiteralPath
:
PS> get-content -LiteralPath "foo[bar].'baz'"
sdflkj
请注意我在字符串周围加了双引号。这是因为单引号将被视为字符串元素,因此'foo'
将被foo
替换,双引号表示解析器应该查看整个字符串(双引号到 - 双引号)。另一种方法是使用转义字符(反引号)。
PS> get-content 'foo`[bar`].`baz`'
sdflkj
至于相同的路径,我建议你避免这样做。您需要某种方法来消除一个实体与另一个实体的歧义。您应该确保您创建的路径对您的资源是唯一的。请记住,您在提供商中构建此路径,因此您可以将消除歧义的功能添加为提供商的一部分。
最后,长度有一些限制,可以表示为文件系统上的路径 。 AFIK,非路径“路径”没有限制