需要来自Invoke-WebRequest输出的字符串的特定行

时间:2018-07-19 16:27:07

标签: powershell

我有以下内容:

$WebContent = Invoke-WebRequest -Uri "URLHERE/$PCNAME" -UseDefaultCredential |
              Select-Object -ExpandProperty Content

它输出完美:

Key1: sfsdfsdfsfdsfsdsfs
Key2: SD:34:SD:34:SD:34
Version: 4
Timestamp: 4/13/2018 4:00:11 PM

但是我需要能够将Key1和Key2的内容放入一个变量中,而没有空格,并能够适应每个密钥的长度变化的可能性。

我试图使用Substring($len - 83,14)来获取全部内容的长度并解析出密钥的确切位置,但是由于某些原因,它们的长度有所变化,有一些已经切断了密钥,因此错误的输出。我可能需要整行,然后将':'和''之后的所有内容放入变量中。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

假设您得到的响应是文本,而不是结构化对象,则可以执行以下操作:

$data = $WebContent -replace ': ', '=' |
        Out-String |
        ConvertFrom-StringData

以上内容将用=字符替换冒号,后跟一个空格,并将所有内容合并为一个字符串,以便ConvertFrom-StringData可以将键/值对的列表转换为哈希表。然后,您可以将值分配给各个变量,如下所示:

$key = $data['Key1']

或按原样使用哈希表。

答案 1 :(得分:1)

将内容分割成几行,匹配所需的内容,然后忽略其余内容,替换不想要的部分,存储结果:

$test = @'
Key1: sfsdfsdfsfdsfsdsfs
Key2: SD:34:SD:34:SD:34
Version: 4
Timestamp: 4/13/2018 4:00:11 PM
'@


$result = ($test -split "`r?`n") -match '^key.: ' -replace '^key.: '

取决于您的意思是“将两个键放入一个变量”;这个结果将是一个字符串数组。

许多可能的方法之一。

相关问题