Как получить файл с данными типа system.array и отсортировать его с помощью PowerShell? - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу получить содержимое файла.

Формат файла такой:

Disk0MapForUefiBootOrder
    PciRoot(0x0)/Pci(0x14,0x0)

    PciRoot(0x0)/Pci(0x1B,0x0)/Pci(0x0,0x0)/NVMe(0x1,7D-F0-B6-71-B7-38-25-00)

    PciRoot(0x0)/Pci(0x1B,0x4)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)

    PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x1,0xFFFF,0x0)

    BBS(0xFFFF,,0x0)/PciRoot(0x0)/Pci(0x14,0x0)

Fast Charge
    Disable
    *Enable 

......

Я хочупрочитайте значение этого Disk0MapForUefiBootOrder, которое содержит NVMe и Sata:

PciRoot(0x0)/Pci(0x1B,0x0)/Pci(0x0,0x0)/NVMe(0x1,7D-F0-B6-71-B7-38-25-00)

PciRoot(0x0)/Pci(0x1B,0x4)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)

PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x1,0xFFFF,0x0)

, и передайте его в выходной файл. Затем я должен отсортировать его по рангу.

Я пробовал это, но я могу только читать содержимое. Но я не могу оценить его.

Может кто-нибудь помочь мне, пожалуйста?

$FileContents = Get-Content "D:\Boot\file.txt" | Select-String -Pattern "PciRoot" | Out-File D:\Boot\Out2 -Force
    $FileContents
    $Rank = @{
        'NVMe' = 1
        'Sata' = 2
    }
    $FileContents |
        Where-Object { $Rank.Contains("NVMe" -and "Sata") } | Sort-Object {[int64]$_.Size} |
        Sort-Object { $Rank["NVMe" -and "Sata"] }|
        Export-Csv 'Output.csv' -NoType

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Вы можете сделать следующее, если предположим, что необходимые данные имеют отступ:

$found = $false
switch -regex -file file.txt {
    'Disk0MapForUefiBootOrder' { $found = $true; continue }
    'nvme|sata' { if ($found) { $_.Trim() }}
    '^\S' { if ($found) { return }}
}
0 голосов
/ 04 ноября 2019

Вы можете использовать Select-String с -Pattern.

$FileContents= Get-Content $FilePath | Select-String -Pattern "NVMe|Sata"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...