Поделиться через


ConvertFrom-StringData

Преобразует строку, содержащую одну или несколько пар ключей и значений в хэш-таблицу.

Синтаксис

ConvertFrom-StringData
                [-StringData] <String>
                [[-Delimiter] <Char>]
                [<CommonParameters>]

Описание

Командлет ConvertFrom-StringData преобразует строку, содержащую одну или несколько пар ключей и значений в хэш-таблицу. Так как каждая пара "ключ-значение" должна находиться в отдельной строке, строки здесь часто используются в качестве входного формата. По умолчанию ключ должен быть отделен от значения символом равенства (=).

Командлет ConvertFrom-StringData считается безопасным командлетом, который можно использовать в разделе DATA скрипта или функции. При использовании в разделе DATA содержимое строки должно соответствовать правилам для раздела DATA. Дополнительные сведения см. в разделе about_Data_Sections.

ConvertFrom-StringData поддерживает escape-последовательности символов, разрешенные обычными средствами машинного перевода. То есть командлет может интерпретировать обратные очки (\) в виде escape-символов в строковых данных с помощью метода Regex.Unescape метод, а не символа обратного ввода PowerShell (`), который обычно сигнализирует о конце строки в скрипте. Внутри строки здесь не работает символ backtick. Вы также можете сохранить литеральную обратную косую черту в результатах, экранируя её предыдущей обратной косой чертой, например: \\. Нераскрытые символы обратной косой черты, такие как те, которые часто используются в пути к файлам, могут отображаться как недопустимые escape-последовательности в результатах.

PowerShell 7 добавляет параметр разделителя .

Примеры

Пример 1: Преобразование here-string с одиночными кавычками в хеш-таблицу

В этом примере строка с одинарными кавычками heredoc сообщений пользователей преобразуется в хэш-таблицу. В строке с одинарными кавычками значения не подставляются в переменные, и выражения не вычисляются. Командлет ConvertFrom-StringData преобразует значение переменной $Here в хэш-таблицу.

$Here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable doesn't exist.
'@
ConvertFrom-StringData -StringData $Here

Name                           Value
----                           -----
Msg3                           The specified variable doesn't exist.
Msg2                           Credentials are required for this command.
Msg1                           The string parameter is required.

Пример 2. Преобразование строковых данных с помощью другого разделителя

В этом примере показано, как преобразовать строковые данные, использующие другой символ в качестве разделителя. В этом примере строковые данные используют символ канала (|) в качестве разделителя.

$StringData = @'
color|red
model|coupe
year|1965
condition|mint
'@
$carData = ConvertFrom-StringData -StringData $StringData -Delimiter '|'
$carData

Name                           Value
----                           -----
condition                      mint
model                          coupe
color                          red
year                           1965

Пример 3. Преобразование строки здесь, содержащей комментарий

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

ConvertFrom-StringData -StringData @'
Name = Disks.ps1

# Category is optional.

Category = Storage
Cost = Free
'@

Name                           Value
----                           -----
Cost                           Free
Category                       Storage
Name                           Disks.ps1

Значение параметра StringData — это строка здесь, а не переменная, содержащая здесь-строку. Любой формат является допустимым. Строка здесь содержит комментарий о одной из строк. ConvertFrom-StringData пропускает однострочные комментарии, но хэш-символ (#) должен быть первым символом без пробелов в строке.

Пример 4. Преобразование строки в хэш-таблицу

Этот пример преобразует строку в двойных кавычках (не here-string) в хэш-таблицу и сохраняет ее в переменной $A.

$A = ConvertFrom-StringData -StringData "Top = Red `n Bottom = Blue"
$A

Name             Value
----             -----
Bottom           Blue
Top              Red

Для удовлетворения условия, что каждая пара "ключ-значение" должна находиться в отдельной строке, строка использует символ новой строки PowerShell (`n) для разделения пар.

Пример 5. Использование в разделе "DATA" скрипта

В этом примере показана команда ConvertFrom-StringData, используемая в разделе DATA скрипта. Инструкции под разделом DATA отображают текст пользователю.

$TextMsgs = DATA {
ConvertFrom-StringData @'
Text001 = The $Notebook variable contains the name of the user's system notebook.
Text002 = The $MyNotebook variable contains the name of the user's private notebook.
'@
}
$TextMsgs

Name             Value
----             -----
Text001          The $Notebook variable contains the name of the user's system notebook.
Text002          The $MyNotebook variable contains the name of the user's private notebook.

Поскольку текст содержит имена переменных, он должен быть заключен в строку с одинарными кавычками, чтобы переменные интерпретировались буквально и не расширяются. Переменные не разрешены в разделе DATA.

Пример 6. Использование оператора конвейера для передачи строки

В этом примере показано, что для отправки строки в ConvertFrom-StringDataможно использовать оператор конвейера (|). Значение переменной $Here передаётся в ConvertFrom-StringData, а результат сохраняется в переменной $Hash.

$Here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable doesn't exist.
'@
$Hash = $Here | ConvertFrom-StringData
$Hash

Name     Value
----     -----
Msg3     The specified variable doesn't exist.
Msg2     Credentials are required for this command.
Msg1     The string parameter is required.

Пример 7. Использование escape-символов для добавления новых строк и возвращаемых символов

В этом примере показано использование escape-символов для создания новых строк и возврата символов в исходных данных. Escape-последовательность \n используется для создания новых строк в блоке текста, который связан с именем или элементом в результирующей хэш-таблице.

ConvertFrom-StringData @"
Vincentio = Heaven doth with us as we with torches do,\nNot light them for themselves; for if our virtues\nDid not go forth of us, 'twere all alike\nAs if we had them not.
Angelo = Let there be some more test made of my metal,\nBefore so noble and so great a figure\nBe stamp'd upon it.
"@ | Format-List

Name  : Angelo
Value : Let there be some more test made of my metal,
        Before so noble and so great a figure
        Be stamp'd upon it.

Name  : Vincentio
Value : Heaven doth with us as we with torches do,
        Not light them for themselves; for if our virtues
        Didn't go forth of us, 'twere all alike
        As if we had them not.

Пример 8. Использование escape-символа обратной косой черты для правильной отрисовки пути к файлу

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

ConvertFrom-StringData "Message=Look in c:\\Windows\\System32"

Name                           Value
----                           -----
Message                        Look in c:\Windows\System32

Параметры

-Delimiter

Символ, используемый для разделения ключа от значения данных в преобразуемой строке. Разделитель по умолчанию — символ равенства (=) . Этот параметр был добавлен в PowerShell 7.

Тип:Char
Position:1
Default value:'='
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-StringData

Указывает строку для преобразования. Можно использовать этот параметр или передать строку в ConvertFrom-StringData. Имя параметра является необязательным.

Значение этого параметра должно быть строкой, содержащей одну или несколько пар "ключ-значение". Каждая пара "ключ-значение" должна находиться в отдельной строке, или каждая пара должна быть разделена новыми символами (`n).

Вы можете включить комментарии в строку, но комментарии не могут находиться в той же строке, что и пара "ключ-значение". ConvertFrom-StringData пропускает однострочные комментарии. Хэш-символ (#) должен быть первым символом без пробелов в строке. Все символы в строке после хэш-символа (#) игнорируются. Комментарии не включены в хэш-таблицу.

Строка здесь — это строка, состоящая из одной или нескольких строк. Кавычки в строке здесь интерпретируются буквально как часть строковых данных. Дополнительные сведения см. в about_Quoting_Rules.

Тип:String
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

Входные данные

String

Строку, содержащую пару "ключ-значение", можно передать в этот командлет.

Выходные данные

Hashtable

Этот командлет возвращает хэш-таблицу, которую он создаёт из пар "ключ-значение".

Примечания

Строка здесь — это строка, состоящая из одной или нескольких строк, в которых кавычки интерпретируются буквально.

Этот командлет может быть полезен в сценариях, отображающих пользовательские сообщения на нескольких языках. Хэш-таблицы в стиле словаря можно использовать для изоляции текстовых строк от кода, таких как в файлах ресурсов, и форматирования текстовых строк для использования в средствах перевода.