Powershell在字段名称和值之间动态移动



对于所有字段和值,以"LOAD";以Weight_KGS结尾,我想创建一个html表(2列:描述和值/内容(。但我不想硬连接22行代码(x2(

我的数组如下:(下面只有1行(

PS C:WINDOWSsystem32> $Emails
-----------------------------------------
ID                     : Xtest
Subject                : LOAD 85465494557 - TO 37654004
LOAD                   : 8594557
TransportOrder         : 37941004
DeliveryNote           : 
BusinessCase           : Full
ServiceProvider        : Me
PickupCountry          : FR
Pickup_ID              : 2546s
PickupName             : YoKo
PickupStreet           : Mani 12
PickupZipCode          : 25320
PickupCity             : Frankfurt
DeliveryName           : ManiMani
DeliveryDock           : LeftGreen
ReferenceNumber        : 
ServiceLevel           : Prio
TransportMode          : FTL
PickupDate             : 7/8/2020 00:00:00
PickupTime             : 30/12/2020 00:00:00
DeliveryDate           : 7/8/2020 00:00:00
DeliveryTime           : 30/12/2020 14:34:00
LoadingMeter_mtr       : 11.5
Weight_kgs             : 2560
Comment_TO             : I am new to Powershell
Comment_LOAD           : PowershellTest

--------------第一条记录的结束数据

对于所有字段和值;LOAD";以Weight_KGS结尾,我想创建一个html表(2列:描述和值/内容(。

我可以对字段和值进行22次硬编码:例如;LOAD"$电子邮件。负载但这似乎很愚蠢。我正在寻找一个片段,例如看起来像这样:

$startingfield=3
Do while $startingfield<25
$FieldNM = $emails.FieldName[$startingfield]
$FieldVAL = $emails.FieldValue[$startingfield]
Write-output $emails.fieldNM
Write-output $emails.fieldVAL
$startingfield=$startingfield+1
Loop

我很抱歉,因为我刚开始写电源壳脚本和写问题(我希望有人能帮助我,并为我指明正确的方向,因为我已经阅读和搜索了几个小时,但我可以找到合适的搜索词,以同样无用的视频结束(

非常感谢您花时间阅读迄今为止的

以下是解析指定数据的一种方法。它将把数据视为单个字符串,并从LOAD一直匹配到Comment_TO之前。然后,我们通过用等号替换分号来准备数据,并让ConvertFrom-StringData发挥它的魔力。

对于第一个测试,我们将把数据存储在here字符串中。

$data = @'
-----------------------------------------
ID                     : Xtest
Subject                : LOAD 85465494557 - TO 37654004
LOAD                   : 8594557
TransportOrder         : 37941004
DeliveryNote           : 
BusinessCase           : Full
ServiceProvider        : Me
PickupCountry          : FR
Pickup_ID              : 2546s
PickupName             : YoKo
PickupStreet           : Mani 12
PickupZipCode          : 25320
PickupCity             : Frankfurt
DeliveryName           : ManiMani
DeliveryDock           : LeftGreen
ReferenceNumber        : 
ServiceLevel           : Prio
TransportMode          : FTL
PickupDate             : 7/8/2020 00:00:00
PickupTime             : 30/12/2020 00:00:00
DeliveryDate           : 7/8/2020 00:00:00
DeliveryTime           : 30/12/2020 14:34:00
LoadingMeter_mtr       : 11.5
Weight_kgs             : 2560
Comment_TO             : I am new to Powershell
Comment_LOAD           : PowershellTest
'@

现在让我们处理

$data -match '(?s)^LOAD.*(?=Comment_TO)' | foreach {
$ht = [ordered]@{}
$Matches.0 -split [Environment]::NewLine |
Foreach-Object{$_ -Replace "(?<=D):","=" |
ConvertFrom-StringData | Foreach-Object{$ht += $_}}
[PSCustomObject]$ht
} -OutVariable results

输出

LOAD             : 8594557
TransportOrder   : 37941004
DeliveryNote     : 
BusinessCase     : Full
ServiceProvider  : Me
PickupCountry    : FR
Pickup_ID        : 2546s
PickupName       : YoKo
PickupStreet     : Mani 12
PickupZipCode    : 25320
PickupCity       : Frankfurt
DeliveryName     : ManiMani
DeliveryDock     : LeftGreen
ReferenceNumber  : 
ServiceLevel     : Prio
TransportMode    : FTL
PickupDate       : 7/8/2020 00:00:00
PickupTime       : 30/12/2020 00:00:00
DeliveryDate     : 7/8/2020 00:00:00
DeliveryTime     : 30/12/2020 14:34:00
LoadingMeter_mtr : 11.5
Weight_kgs       : 2560

输出显示,但也存储在$results中-要访问每个属性,只需使用点符号

PS C:> $results.load
8594557
PS C:> $results.weight_kgs
2560
PS C:> $results.PickupDate
7/8/2020 00:00:00

这是同样的事情,但从文件中读取-注意-Raw参数。

(get-content $filestoprocess -Raw) -match '(?s)^LOAD.*(?=Comment_TO)' | foreach {
$ht = [ordered]@{}
$Matches.0 -split [Environment]::NewLine |
Foreach-Object{$_ -Replace "(?<=D):","=" |
ConvertFrom-StringData | Foreach-Object{$ht += $_}}
[PSCustomObject]$ht
} -OutVariable results

现在它已经在对象中了,您可以专注于制作HTML

最新更新