如何使用PowerShell读取INI文件的特定项目?

时间:2019-06-06 06:50:33

标签: powershell parameters arguments

我想读取INI文件的特定项目,INI文件的部分中有5个项目,并且我想读取4个项目,但项目编号3除外。

我已经尝试读取所有项目,但是找不到一种方法来指定要读取的项目以及读取的文件格式,如下所示:

Name Value
AA   12
BB   13
CC   14
DD   15
EE   16

我使用此命令来执行它。

File1.ps1 Read-File -FilePath C:\Users\Data.ini -a_section Code -store C:\Users\
function Read-File {
    Param(
        [Parameter(Mandatory=$true)]$FilePath,
        [Parameter(Mandatory=$true)]$a_section,
        [Parameter(Mandatory=$true)]$store
    )

    $input_file = $FilePath
    $ini_file = @{}

    Get-Content $input_file | ForEach-Object {
        $_.Trim()
    } | Where-Object {
        $_ -notmatch '^(;|$)'
    } | ForEach-Object {
        if ($_ -match '^\[.*\]$') {
            $section = $_ -replace '\[|\]'
            $ini_file[$section] = @{}
        } else {
            $key, $value = $_ -split '\s*=\s*', 2
            $ini_file[$section][$key] = $value
        }
    }

     $Path_Store = $store
     $Get_Reg = $ini_file.($a_section)

     $Output = $Get_Reg | Out-File $Path_Store\Out_Test
}

$cmd, $params = $args
& $cmd @params

我的期望结果,我有一个像这样的输出文件

AA=12
BB=13
DD=15
EE=16

我的INI文件如下:

[Name]
1=Joe
2=Grace

[Code]
AA=12
BB=13
CC=14
DD=15
EE=16

1 个答案:

答案 0 :(得分:1)

尝试一下:

function Get-IniSection {
    Param(
        [Parameter(Mandatory=$true)]$Path,
        [Parameter(Mandatory=$true)]$SectionName
    )

    $ini_file = @{}

    Get-Content $Path | ForEach-Object {
        $_.Trim()
    } | Where-Object {
        $_ -notmatch '^(;|$)'
    } | ForEach-Object {
        if ($_ -match '^\[.*\]$') {
            $section = $_ -replace '\[|\]'
            $ini_file += @{ $section = @{} }
        } else {
            $key, $value = $_ -split '\s*=\s*', 2
            $ini_file[$section] += @{ $key = $value }
        }
    }

    return $ini_file[$SectionName]
}

$section = Get-IniSection -Path "C:\temp\test.ini" -SectionName "code"

$section.GetEnumerator() | Where-Object { $_.Name -ne "EE" }

$section.GetEnumerator() | ForEach-Object { "$($_.Name)=$($_.Value)" }

$section.GetEnumerator() | 
    Where-Object { $_.Name -in @("A1","AE","AP","AS","E1","E2","JP","M1","M2","N1","N2","P1","P2","P3","P4","PR","RU","S1","S2","W1","W2","W3","W4","ZH") } | 
    Select-Object -ExpandProperty "Value"

$section.GetEnumerator() | 
    Where-Object { $_.Name -in @("A1","AE","AP","AS","E1","E2","JP","M1","M2","N1","N2","P1","P2","P3","P4","PR","RU","S1","S2","W1","W2","W3","W4","ZH") } | 
    Foreach-Object { ($_.Value -split ",")[0] }