0

对于所有字段和值,以“LOAD”开头并以 Weight_KGS 结尾,我想创建一个 html 表(2 列:描述和值/内容)。但我不想硬连线 22 行代码 (x 2)

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

PS C:\WINDOWS\system32> $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 次硬编码:例如 Write-output "LOAD" $emails.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

我很抱歉,因为我是编写power-shell脚本和编写问题的新手(我希望有人可以帮助我并指出正确的方向,因为我已经阅读和搜索了几个小时,但我可以找到正确的搜索词,结束在相同的无用视频中)

非常感谢您花时间阅读本文

4

1 回答 1

0

这是解析指定数据的一种方法。它将数据视为单个字符串并从 LOAD 到 Comment_TO 之前匹配。然后,我们通过用等号替换分号来准备数据,让它ConvertFrom-StringData变得神奇。

对于第一个测试,我们将数据存储在here-string中。

$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

于 2020-08-18T02:33:20.057 回答