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


ConvertFrom-String

Извлекает и анализирует структурированные свойства из строкового содержимого.

Синтаксис

ConvertFrom-String
                [-Delimiter <String>]
                [-PropertyNames <String[]>]
                [-InputObject] <String>
                [<CommonParameters>]
ConvertFrom-String
                [-TemplateFile <String[]>]
                [-TemplateContent <String[]>]
                [-IncludeExtent]
                [-UpdateTemplate]
                [-InputObject] <String>
                [<CommonParameters>]

Описание

Командлет ConvertFrom-String извлекает структурированные свойства из строкового содержимого и анализирует их. Этот командлет создает объект, анализируя текст из традиционного текстового потока. Для каждой строки в конвейере командлет разделяет входные данные по разделителю или выражению синтаксического анализа, а затем присваивает имена свойств каждому из результирующего разделенного элемента. Эти имена свойств можно указать; Если это не так, они автоматически создаются для вас.

Набор параметров по умолчанию командлета ByDelimiter разбивается точно на разделитель регулярных выражений. Он не выполняет сопоставление кавычки или экранирование разделителя по мере выполнения командлета Import-Csv .

Альтернативный набор параметров командлета TemplateParsing создает элементы из групп, захваченных регулярным выражением. Дополнительные сведения о регулярных выражениях см. в about_Regular_Expressions.

Этот командлет поддерживает два режима: базовый синтаксический анализ с разделителями и автоматически создаваемый анализ на основе примера.

Анализ с разделением, используемый по умолчанию, разбивает входные данные с помощью пробелов и присваивает имена свойств получаемым группам.

Разделитель можно настроить, перенастроив ConvertFrom-String результаты в один из Format-* командлетов или используя параметр Разделителя .

Командлет также поддерживает автоматически создаваемый анализ на основе FlashExtract, исследовательской работы Microsoft Research.

Примеры

Пример 1. Создание объекта с именами свойств по умолчанию

"Hello World" | ConvertFrom-String

P1    P2
--    --
Hello World

Эта команда создает объект с именами свойств по умолчанию, P1 и P2.

Пример 1A. Получение сведений о созданном объекте

Эта команда создает один объект с свойствами P1, P2; оба свойства имеют тип String по умолчанию.

"Hello World" | ConvertFrom-String | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
P1          NoteProperty string P1=Hello
P2          NoteProperty string P2=World

Пример 2. Создание объекта с именами свойств по умолчанию с помощью разделителя

Эта команда создает объект с доменом и именем пользователя с помощью обратной косой черты (\) в качестве разделителя. Символ обратной косой черты должен быть экранирован с другой обратной косой чертой при использовании регулярных выражений.

"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"

P1      P2
--      --
Contoso Administrator

Пример 3. Создание объекта, содержащего два именованных свойства

В следующем примере создаются объекты из записей файлов windows hosts.

$content = Get-Content C:\Windows\System32\drivers\etc\hosts
$content = $content -match "^[^#]"
$content | ConvertFrom-String -PropertyNames IP, Server

IP             Server
--             ------
192.168.7.10   W2012R2
192.168.7.20   W2016
192.168.7.101  WIN8
192.168.7.102  WIN10

Командлет Get-Content сохраняет содержимое файла узлов Windows в $content. Вторая команда удаляет комментарии в начале файла узлов с помощью регулярного выражения, соответствующего любой строке, которая не начинается с (#). Последняя команда преобразует оставшийся текст в объекты с свойствами Сервера и IP .

Пример 4. Используйте выражение в качестве значения параметра TemplateContent, сохраните результаты в переменной.

Эта команда использует выражение в качестве значения параметра TemplateContent . Выражение сохраняется в переменной для простоты. Windows PowerShell понимает, что строка, используемая в конвейере, ConvertFrom-String имеет три свойства:

  • Имя
  • Телефон
  • возраст
$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData

Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789    6
Lucky Shot    (206) 987-4321  12
Elephant Wise 425-888-7766    87
Wild Shrimp   (111)  222-3333 1

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

Пример данных $templateпредоставляет два разных формата телефонов:

  • 425-123-6789
  • (206) 987-4321

Пример данных также предоставляет два разных возрастных формата:

  • 6
  • 12

Это означает, что телефоны, как (206) 987 4321 и не будут распознаны, так как нет примеров данных, которые соответствуют этому шаблону, так как нет дефисов.

Пример 5. Указание типов данных для созданных свойств

Это тот же пример, что и пример 4, приведенный выше. Разница заключается в том, что строка шаблона включает тип данных для каждого требуемого свойства.

$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData

Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789      6
Lucky Shot    (206) 987-4321   12
Elephant Wise 425-888-7766     87
Wild Shrimp   (111)  222-3333   1

$PersonalData | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
age         NoteProperty int age=6
Name        NoteProperty string Name=Phoebe Cat
phone       NoteProperty string phone=425-123-6789

Командлет Get-Member используется для отображения того, что свойство age является целым числом.

Параметры

-Delimiter

Задает регулярное выражение, определяющее границу между элементами. Элементы, созданные разделением, становятся свойствами в результирующем объекте. Разделитель в конечном счете используется в вызове метода Split типа [System.Text.RegularExpressions.RegularExpression].

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

-IncludeExtent

Указывает, что этот командлет содержит текстовое свойство экстентов, которое удаляется по умолчанию.

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

-InputObject

Задает строки, полученные из конвейера, или переменную, содержащую строковый объект.

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

-PropertyNames

Задает массив имен свойств, которым следует назначать разделенные значения в результирующем объекте. Каждая строка текста, разделенная или анализируемая, создает элементы, представляющие значения свойств. Если элемент является результатом группы захвата, а эта группа захвата называется (например, (?<name>) или (?'name') ), то имя этой группы захвата назначается свойству.

Если вы предоставляете элементы в массиве PropertyName , эти имена назначаются свойствам, которые еще не были названы.

Если вы предоставляете больше имен свойств, чем поля, PowerShell игнорирует дополнительные имена свойств. Если не указать достаточно имен свойств для имен всех полей, PowerShell автоматически назначает числовые имена свойств любым свойствам, которые не именуются: P1, P2 и т. д.

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

-TemplateContent

Указывает выражение или выражение, сохраненное в виде переменной, описывающее свойства, которым этот командлет назначает строки. Синтаксис спецификации поля шаблона приведен ниже {[optional-typecast]<name>:<example-value>}.

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

-TemplateFile

Указывает файл в виде массива, который содержит шаблон для требуемого синтаксического анализа строки. В файле шаблона свойства и их значения заключены в квадратные скобки, как показано ниже. Если свойство, например свойство Name и связанные с ним другие свойства, отображается несколько раз, можно добавить звездочку (*), чтобы указать, что это приводит к нескольким записям. Это позволяет избежать извлечения нескольких свойств в одну запись.

{Name*:D avid Chew} {City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Антонио Морено} {City:Issaquah}, {State:WA}

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

-UpdateTemplate

Указывает, что этот командлет сохраняет результаты алгоритма обучения в комментарий в файле шаблона. Это упрощает процесс обучения алгоритма. Чтобы использовать этот параметр, необходимо также указать файл шаблона с параметром TemplateFile .

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

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

String

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

PSCustomObject

Примечания

Windows PowerShell включает следующие псевдонимы для ConvertFrom-String:

  • CFS