gpt4 book ai didi

powershell - 如何将多行字符串转换为对象或数组?

转载 作者:行者123 更新时间:2023-12-03 01:29:14 25 4
gpt4 key购买 nike

我觉得这在Python中很容易做到,但是我想弄清楚如何在PowerShell中做到这一点。我正在从Powershell调用的另一个可执行文件中获得此输出。我的最终目标是提取文本的第一部分( session ID),IP地址和日期/时间,以便可以将每个文本转换为PowerShell对象。

我不知道的地方是如何将每组信息(3行文本)放入一个数组,我认为这将使转换为对象更容易。我敢肯定,也有一种方法可以从巨型字符串生成对象。我对这两种方法都开放。下面的输出保存到变量。无论我如何分割字符串,数组最终都以文本的每一行作为元素,而不是我需要的三行。我尝试删除没有成功的新行和回车符。有人可以向正确的方向推我吗?

10480fc9aa       telnet    user@172.16.8.11
Logon at: Tue Jan 14 07:55:20 2020
Running: program.bat
10481e6429 telnet user@172.16.8.14
Logon at: Tue Jan 14 07:58:53 2020
Running: program.bat
1048338699 telnet user@172.16.8.13
Logon at: Tue Jan 14 08:09:28 2020
Running: program.bat
10485aef1d telnet user@172.16.8.10
Logon at: Tue Jan 14 08:39:17 2020
Running: program.bat
1048ece4b9 telnet user@172.16.8.3
Logon at: Tue Jan 14 10:52:24 2020
Running: program.bat
1048fef5d5 telnet user@172.16.8.6
Logon at: Tue Jan 14 11:18:44 2020
Running: program.bat
1049008fab telnet user@172.16.8.15
Logon at: Tue Jan 14 11:20:30 2020
Running: program.bat
104910d0a7 telnet user@172.16.8.15
Logon at: Tue Jan 14 11:42:15 2020
Running: program.bat
104930ec10 telnet user@172.16.8.7
Logon at: Tue Jan 14 12:26:23 2020
Running: program.bat
10493c8e24 telnet user@172.16.8.4
Logon at: Tue Jan 14 12:43:08 2020
Running: program.bat
10493f7650 telnet user@172.16.8.15
Logon at: Tue Jan 14 12:47:13 2020
Running: program.bat

最佳答案

您可以尝试以下方法,该方法通过switch语句逐行处理可执行文件的输出行,该语句使用正则表达式提取感兴趣的信息,然后使用提取的信息为3行的每个块构造一个自定义输出对象:

$i = 0 
yourexecutable.exe | ForEach-Object {
$line = $_
switch (++$i % 3) {
1 { # 1st line of a block of 3: extract the session ID and IP address.
$null = $line -match '^(\S+) .*@(\S+)'
$sessionId = $Matches[1]
$ip = $Matches[2]
}
2 { # 2nd line: extract the login timestamp.
$null = $line -match 'Logon at: (.+)'
$date = $Matches[1]
}
default { # 3rd line: construct the output object for the block at hand.
[pscustomobject] @{
SessionId = $sessionId
Ip = $ip
Date = $date
}
}
}
}

使用样本输入,将产生:

SessionId  Ip          Date
--------- -- ----
10480fc9aa 172.16.8.11 Tue Jan 14 07:55:20 2020
10481e6429 172.16.8.14 Tue Jan 14 07:58:53 2020
1048338699 172.16.8.13 Tue Jan 14 08:09:28 2020
10485aef1d 172.16.8.10 Tue Jan 14 08:39:17 2020
1048ece4b9 172.16.8.3 Tue Jan 14 10:52:24 2020
1048fef5d5 172.16.8.6 Tue Jan 14 11:18:44 2020
1049008fab 172.16.8.15 Tue Jan 14 11:20:30 2020
104910d0a7 172.16.8.15 Tue Jan 14 11:42:15 2020
104930ec10 172.16.8.7 Tue Jan 14 12:26:23 2020
10493c8e24 172.16.8.4 Tue Jan 14 12:43:08 2020
10493f7650 172.16.8.15 Tue Jan 14 12:47:13 2020

注意,所有属性值都是字符串。例如,如果您希望 .Date属性的类型为 [datetime],则可以使用 [datetime]::ParseExact($date, '...')-请参见 System.DateTime.ParseExact

关于powershell - 如何将多行字符串转换为对象或数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com