Powershell哈希表Get_项带有反斜杠

Powershell哈希表Get_项带有反斜杠,powershell,Powershell,有人能解释为什么哈希表的Get_项在写入主机时与变量的行为不同吗 以下代码: $filePathA = "\\server\folderA" $filePathB = "\\server\folderB" $here = @' FilePathA = \\server\folderA FilePathB = \\server\folderB '@ $hashtable = ConvertFrom-StringData -stringdata $here Write-Host $filePa

有人能解释为什么哈希表的Get_项在写入主机时与变量的行为不同吗

以下代码:

$filePathA = "\\server\folderA"
$filePathB = "\\server\folderB"

$here = @'
FilePathA = \\server\folderA
FilePathB = \\server\folderB
'@

$hashtable = ConvertFrom-StringData -stringdata $here

Write-Host $filePathA
Write-Host $hashtable.Get_Item("FilePathA")
Powershell ISE中的输出:

\\server\folderA
\server
olderA
是否可以防止Get_Item的这种行为,使其行为与变量相同

提前感谢,,
Mike.

行为不是通过获取项目,而是通过您的输入。
convertfromstringdata
假定转义数据正确:

ConvertFrom StringData支持以下转义字符序列: 传统的机器翻译工具允许。即,cmdlet 可以将反斜杠()解释为字符串数据中的转义字符 通过使用Regex.Unescape方法,而不是Windows PowerShell 反勾号字符(`),通常表示中的一行结束 剧本。在here字符串中,反勾号字符不存在 工作您还可以通过以下方式在结果中保留文字反斜杠: 用前面的反斜杠转义它,如下:\。无替身 反斜杠字符,如文件中常用的字符 路径,可以在结果中呈现为非法转义序列

因此,哈希表已经包含垃圾数据:

$hashtable

Name                           Value
----                           -----
FilePathA                      \server♀olderA
FilePathB                      \server♀olderB
正确的转义有助于:

$here = @'
FilePathA = \\\\server\\folderA
FilePathB = \\\\server\\folderB
'@

$hashtable = ConvertFrom-StringData -stringdata $here
$hashtable

Name                           Value
----                           -----
FilePathA                      \\server\folderA
FilePathB                      \\server\folderB
为了实现以下目的,
[Regex]::Escape()
可以这样使用:

# Build similar a string
$here2 = $("FilePathA = {0}`nFilePathB = {1}" -f [Regex]::Escape("\\server\folderA"), [Regex]::Escape("\\server\folderB") )

$here2
FilePathA = \\\\server\\folderA
FilePathB = \\\\server\\folderB

$hashtable2 = ConvertFrom-StringData -stringdata $here2
$hashtable2

Name                           Value
----                           -----
FilePathA                      \\server\folderA
FilePathB                      \\server\folderB
如果您阅读文档:

ConvertFrom StringData支持以下转义字符序列: 传统的机器翻译工具允许。即,cmdlet 可以将反斜杠()解释为字符串数据中的转义字符 通过使用Regex.Unescape方法,而不是Windows PowerShell 反勾号字符(`),通常表示中的一行结束 剧本。在here字符串中,反勾号字符不存在 工作您还可以通过以下方式在结果中保留文字反斜杠: 用前面的反斜杠转义它,如下:\。无替身 反斜杠字符,如文件中常用的字符 路径,可以在结果中呈现为非法转义序列


因此,双反斜杠在一种情况下被视为转义序列,而在另一种情况下则不被视为转义序列。

我知道这有点旧,但您也可以“重新处理”原始字符串,请注意,它确实看起来很奇怪:

$sStringToConvert = $sRawString -replace '\\', '\\'  
$hashP = ConvertFrom-StringData $sStringToConvert 

非常感谢您的回复-只浏览了文档就觉得自己像个白痴!我的问题是一个人为的场景,让它可以回答-实际上,文件路径是由用户在命令提示符下以单个“;”的形式输入的分隔字符串(准确地说是巧克力包装参数),我替换“;”使用“`”,以便可以创建哈希表,并在稍后的脚本中通过键引用项。我想避免用户不得不逃避反斜杠-感觉到这在我当前的方法中是不可能的。@Godders您可以使用
[Regex]::escape()
自动逃避反斜杠。请参阅编辑。非常感谢您的回复-我们为@vonPryz的答案添加了更多细节。