Как разобрать файл .ini в переменную PowerShell - PullRequest
4 голосов
/ 22 марта 2011

У меня есть следующий INI-файл (с именем metrics.ini), содержащий одну запись, но в будущем в него может быть добавлено больше записей:

$DatabaseConnection_STR=MYSERVER\MYINSTANCE

Мне нужно проанализировать этот файл в переменной PowerShell. Я могу проанализировать строку следующим образом, но я не могу создать новую переменную $ DatabaseConnection_STR (основываясь на том, что было проанализировано из INI-файла). Я не хочу жестко кодировать $ DatabaseConnection_STR в моем скрипте - я бы лучше позволил сценарию понять это, чтобы он мог обрабатывать дополнительные переменные в будущем.

# This code assumes that no blank lines are in the file--a blank line will cause an early termination of the read loop

    ########################################
    #
    # Confirm that the file exists on disk
    #
    ########################################

    $IniFile_NME="C:\temp\metrics.ini"

    dir $IniFile_NME

    ########################################
    #
    # Parse the file
    #
    ########################################

    $InputFile = [System.IO.File]::OpenText("$IniFile_NME")

    while($InputRecord = $InputFile.ReadLine())
        {
            # Display the current record

            write-host "`$InputRecord=$InputRecord"
            write-host ""

            # Determine the position of the equal sign (=)

            $Pos = $InputRecord.IndexOf('=')
            write-host "`$Pos=$Pos"

            # Determine the length of the record

            $Len = $InputRecord.Length
            write-host "`$Len=$Len"

            # Parse the record

            $Variable_NME = $InputRecord.Substring(0, $Pos)
            $VariableValue_STR = $InputRecord.Substring($Pos + 1, $Len -$Pos -1)

            write-host "`$Variable_NME=$Variable_NME"
            write-host "`$VariableValue_STR=$VariableValue_STR"

            # Create a new variable based on the parsed information--**the next line fails**

            `$Variable_NME=$VariableValue_STR
        }
    $InputFile.Close()

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 14 июня 2011

Возможно, проще и лаконичнее использовать команду split.Вы также можете сохранить ваши значения конфигурации в хеш-таблице:

$config = @{}

Get-Content $IniFile_NME | foreach {
    $line = $_.split("=")
    $config.($line[0]) = $line[1]
}

Вы все еще можете использовать тот же метод создания переменных, если не хотите хеш-таблицу, но с использованием чтения, зацикливания и разделения Powershellсделать это проще.

0 голосов
/ 22 марта 2011

Это работает.Оказывается, команда New-Variable не использует знак доллара ($) со своим параметром "-name";Итак, мне пришлось разобрать это.Смотри ниже.

# This code assumes that no blank lines are in the file--a blank line will cause an early termination of the read loop

########################################
#
# Confirm that the file exists on disk
#
########################################

$IniFile_NME="C:\temp\metrics.ini"

dir $IniFile_NME

########################################
#
# Parse the file
#
########################################

$InputFile = [System.IO.File]::OpenText("$IniFile_NME")

while($InputRecord = $InputFile.ReadLine())
    {
        # Display the current record

        write-host "`$InputRecord=$InputRecord"
        write-host ""

        # Determine the position of the equal sign (=)

        $Pos = $InputRecord.IndexOf('=')
        write-host "`$Pos=$Pos"

        # Determine the length of the record

        $Len = $InputRecord.Length
        write-host "`$Len=$Len"

        # Parse the record

        $Variable_NME = $InputRecord.Substring(1, $Pos -1)
        $VariableValue_STR = $InputRecord.Substring($Pos + 1, $Len -$Pos -1)

        write-host "`$Variable_NME=$Variable_NME"
        write-host "`$VariableValue_STR=$VariableValue_STR"

        # Create a new variable based on the parsed information

        new-variable -name $Variable_NME -value $VariableValue_STR
        get-variable -name $Variable_NME
    }
$InputFile.Close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...