Powershell哈希表Get_项带有反斜杠
有人能解释为什么哈希表的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
$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的答案添加了更多细节。