У меня есть встроенная команда CMD, которая выводит этот текст: каждый раздел разделен на строку «-----», я хочу получить каждую порцию в другом массиве, поэтому я могу обработать результат каждый из них,Parse/Split Text Array
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
---Processing--------------------------
---------------------------------------
SKU ID: 2b88c4f2-ea8f-43cd-805e-4d41346e18a7
LICENSE NAME: Office 15, OfficeProPlusVL_MAK edition
LICENSE DESCRIPTION: Office 15, RETAIL(MAK) channel
BETA EXPIRATION: 01/01/1601
LICENSE STATUS: ---LICENSED---
Last 5 characters of installed product key: HT7T7
---------------------------------------
SKU ID: 3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d
LICENSE NAME: Office 15, OfficeVisioProVL_MAK edition
LICENSE DESCRIPTION: Office 15, RETAIL(MAK) channel
BETA EXPIRATION: 01/01/1601
LICENSE STATUS: ---LICENSED---
Last 5 characters of installed product key: WTWRR
---------------------------------------
SKU ID: ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32
LICENSE NAME: Office 15, OfficeProjectProVL_MAK edition
LICENSE DESCRIPTION: Office 15, RETAIL(MAK) channel
BETA EXPIRATION: 01/01/1601
LICENSE STATUS: ---LICENSED---
Last 5 characters of installed product key: TVGWY
---------------------------------------
---------------------------------------
---Exiting-----------------------------
EDIT: Это мой код, я думаю, что это сложно, но только для вас знать, что я не хочу, чтобы вы делать свою работу так:
Function Parse-OSPPResult
{
Param(
[Parameter(Mandatory = $true)]
$Result
)
$c = $Result | ? {$_ -notmatch '^Microsoft|^Copyright|Processing|Exiting|^LICENSE STATUS'}
$c = $c[0..($c.Length -3)]
$LineNumbers = $c | Select-String '^--' |select -ExpandProperty linenumber
if ($LineNumbers.Count -gt 1)
{
$array = @{}
for ($i=0; $i -lt ($LineNumbers.Count -1); $i++)
{
$array[$i] = $c[$LineNumbers[$i]..($LineNumbers[($i + 1)]-2)]
}
$array[$i] = $c[$LineNumbers[$i]..($c.Length -1)]
}
else
{
$array[0] = $c[$LineNumbers..($c.Length)]
}
$arr = @()
foreach ($item in ($array.GetEnumerator() | % {$_.Name}))
{
$Name = (($array[$item] | ? {$_ -match '^LICENSE NAME:'}) -split ': ')[-1]
$Desc = (($array[$item] | ? {$_ -match '^LICENSE DESCRIPTION:'}) -split ': ')[-1]
$Key = (($array[$item] | ? {$_ -match '^Last 5'}) -split ': ')[-1]
$row = "" | Select Name,Description,Key
$row.Name = $Name
$row.Description = $Desc
$row.Key = $Key
$arr += $row
}
return $arr
}
Результат:
Name Description Key
---- ----------- ---
Office 15, OfficeProjectProVL_MAK edition Office 15, RETAIL(MAK) channel HT7T7
Office 15, OfficeVisioProVL_MAK edition Office 15, RETAIL(MAK) channel WTWRR
Office 15, OfficeProPlusVL_MAK edition Office 15, RETAIL(MAK) channel TVGWY
будет рад видеть другие подходы, если это возможно.
* Примечание: Иногда результат имеет только один участок ...
Спасибо.
хорошо, вы можете объяснить немного? – JustCurious
Я нахожу этот ответ, самый легкий, спасибо ... – JustCurious