使用 PowerShell 和 Select-String 解析非标准文件的文本
Parsing non-standard files for text using PowerShell and Select-String
当您使用文本编辑器打开 Microsoft 远程桌面保存的会话时,其中包含值(要自行测试,请打开远程桌面连接,单击“选项”,然后单击“另存为”。在文本中打开生成的 .rdp 文件编辑器)。
然而,在这里使用标准的 Select-String
命令(在其他文件格式上使用完全相同的语法时有效):
$MyOObject."Prompt" = (Select-String -Path $Path -Pattern "promptcredentialonce: (.*)").Matches.Groups[1].Value
... 产生以下错误:
Cannot index a null array
在 PowerShell 2.0 中是否有不同的命令可用于解析此类文件或任何非标准文本文件?
您的模式不正确。 .rdp 文件中选项的语法是
name:type:value
你的情况:
promptcredentialonce:i:0
但是,您正在尝试匹配选项名称(不存在)后带有 space 的内容:
promptcredentialonce: (.*)
没有匹配,.Matches
属性 为空,.Group[1]
尝试对空值进行索引访问。
如果您想要包含类型的值,请删除 space:
promptcredentialonce:(.*)
如果您只需要值,请将模式更改为如下所示:
promptcredentialonce:\w+:(.*)
当您使用文本编辑器打开 Microsoft 远程桌面保存的会话时,其中包含值(要自行测试,请打开远程桌面连接,单击“选项”,然后单击“另存为”。在文本中打开生成的 .rdp 文件编辑器)。
然而,在这里使用标准的 Select-String
命令(在其他文件格式上使用完全相同的语法时有效):
$MyOObject."Prompt" = (Select-String -Path $Path -Pattern "promptcredentialonce: (.*)").Matches.Groups[1].Value
... 产生以下错误:
Cannot index a null array
在 PowerShell 2.0 中是否有不同的命令可用于解析此类文件或任何非标准文本文件?
您的模式不正确。 .rdp 文件中选项的语法是
name:type:value
你的情况:
promptcredentialonce:i:0
但是,您正在尝试匹配选项名称(不存在)后带有 space 的内容:
promptcredentialonce: (.*)
没有匹配,.Matches
属性 为空,.Group[1]
尝试对空值进行索引访问。
如果您想要包含类型的值,请删除 space:
promptcredentialonce:(.*)
如果您只需要值,请将模式更改为如下所示:
promptcredentialonce:\w+:(.*)