Compartilhar via


ConvertFrom-String

Extrai e analisa propriedades estruturadas do conteúdo da cadeia de caracteres.

Sintaxe

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

Description

O ConvertFrom-String cmdlet extrai e analisa propriedades estruturadas do conteúdo da cadeia de caracteres. Esse cmdlet gera um objeto analisando o texto de um fluxo de texto tradicional. Para cada cadeia de caracteres no pipeline, o cmdlet divide a entrada por um delimitador ou uma expressão de análise e, em seguida, atribui nomes de propriedade a cada um dos elementos de divisão resultantes. Você pode fornecer esses nomes de propriedade; caso contrário, eles serão gerados automaticamente para você.

O conjunto de parâmetros padrão do cmdlet, ByDelimiter, é dividido exatamente no delimitador de expressão regular. Ele não executa a correspondência de aspas ou o escape do delimitador como o Import-Csv cmdlet.

O conjunto de parâmetros alternativos do cmdlet, TemplateParsing, gera elementos dos grupos que são capturados por uma expressão regular. Para obter mais informações sobre expressões regulares, consulte about_Regular_Expressions.

Esse cmdlet dá suporte a dois modos: análise delimitada básica e análise orientada por exemplo gerada automaticamente.

A análise delimitada, por padrão, divide a entrada no espaço em branco e atribui nomes de propriedade aos grupos resultantes.

Você pode personalizar o delimitador canalizando os ConvertFrom-String resultados para um dos Format-* cmdlets ou pode usar o parâmetro Delimiter .

O cmdlet também oferece suporte à análise gerada automaticamente e orientada por exemplo com base no FlashExtract, trabalho de pesquisa da Microsoft Research.

Exemplos

Exemplo 1: Gerar um objeto com nomes de propriedade padrão

"Hello World" | ConvertFrom-String

P1    P2
--    --
Hello World

Este comando gera um objeto com nomes de propriedade padrão, P1 e P2.

Exemplo 1A: Conheça o objeto gerado

Este comando gera um objeto com as propriedades P1, P2; ambas as propriedades são do tipo String , por padrão.

"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

Exemplo 2: Gerar um objeto com nomes de propriedade padrão usando um delimitador

Esse comando gera um objeto com um domínio e um nome de usuário usando a barra invertida (\) como delimitador. O caractere de barra invertida deve ser escapado com outra barra invertida ao usar expressões regulares.

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

P1      P2
--      --
Contoso Administrator

Exemplo 3: Gerar um objeto que contém duas propriedades nomeadas

O exemplo a seguir cria objetos a partir de entradas de arquivo de hosts do Windows.

$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

O Get-Content cmdlet armazena o conteúdo de um arquivo hosts do Windows no $content. O segundo comando remove todos os comentários no início do arquivo hosts usando uma expressão regular que corresponde a qualquer linha que não comece com (#). O último comando converte o texto restante em objetos com propriedades Server e IP .

Exemplo 4: use uma expressão como o valor do parâmetro TemplateContent, salve os resultados em uma variável.

Esse comando usa uma expressão como o valor do parâmetro TemplateContent . A expressão é salva em uma variável para simplificar. O Windows PowerShell entende agora que a cadeia de caracteres usada no pipeline tem ConvertFrom-String três propriedades:

  • Nome
  • Telefone
  • age
$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

Cada linha na entrada é avaliada pelas correspondências de amostra. Se a linha corresponder aos exemplos dados no padrão, os valores serão extraídos e passados para a variável de saída.

Os dados de exemplo, $template, fornecem dois formatos de telefone diferentes:

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

Os dados de exemplo também fornecem dois formatos de idade diferentes:

  • 6
  • 12

Isso implica que os telefones como (206) 987 4321 não serão reconhecidos, porque não há dados de amostra que correspondam a esse padrão porque não há hífens.

Exemplo 5: Especificando tipos de dados para as propriedades geradas

Este é o mesmo exemplo do Exemplo 4, acima. A diferença é que a cadeia de caracteres padrão inclui um tipo de dados para cada propriedade desejada.

$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

O Get-Member cmdlet é usado para mostrar que a propriedade age é um inteiro.

Parâmetros

-Delimiter

Especifica uma expressão regular que identifica o limite entre os elementos. Os elementos criados pela divisão tornam-se propriedades no objeto resultante. O delimitador é usado em uma chamada para o método Split do tipo [System.Text.RegularExpressions.RegularExpression].

Tipo:String
Aliases:DEL
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-IncludeExtent

Indica que esse cmdlet inclui uma propriedade de texto de extensão que é removida por padrão.

Tipo:SwitchParameter
Aliases:IE
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-InputObject

Especifica cadeias de caracteres recebidas do pipeline ou uma variável que contém um objeto de cadeia de caracteres.

Tipo:String
Cargo:0
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-PropertyNames

Especifica uma matriz de nomes de propriedade aos quais atribuir valores de divisão no objeto resultante. Cada linha de texto que você divide ou analisa gera elementos que representam valores de propriedade. Se o elemento for o resultado de um grupo de captura e esse grupo de captura for nomeado (por exemplo, (?<name>) ou (?'name') ), o nome desse grupo de captura será atribuído à propriedade.

Se você fornecer elementos na matriz PropertyName , esses nomes serão atribuídos a propriedades que ainda não foram nomeadas.

Se você fornecer mais nomes de propriedade do que campos, o PowerShell ignorará os nomes de propriedade extras. Se você não especificar nomes de propriedade suficientes para nomear todos os campos, o PowerShell atribuirá automaticamente nomes de propriedade numéricos a todas as propriedades que não são nomeadas: P1, P2 etc.

Tipo:String[]
Aliases:PN
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-TemplateContent

Especifica uma expressão, ou uma expressão salva como uma variável, que descreve as propriedades às quais esse cmdlet atribui cadeias de caracteres. A sintaxe de uma especificação de campo de modelo é a seguinte: {[optional-typecast]<name>:<example-value>}.

Tipo:String[]
Aliases:TC
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-TemplateFile

Especifica um arquivo, como uma matriz, que contém um modelo para a análise desejada da cadeia de caracteres. No arquivo de modelo, as propriedades e seus valores são colocados entre colchetes, conforme mostrado abaixo. Se uma propriedade, como a propriedade Name e suas outras propriedades associadas, aparecer várias vezes, você poderá adicionar um asterisco (*) para indicar que isso resulta em vários registros. Isso evita a extração de várias propriedades em um único registro.

{nome*:D ávido mastigar} {Cidade:Redmond}, {Estado:WA} {Nome*:Evan Narvaez} {Nome*:Antonio Moreno} {Cidade:Issaquah}, {Estado:WA}

Tipo:String[]
Aliases:TF
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-UpdateTemplate

Indica que esse cmdlet salva os resultados de um algoritmo de aprendizado em um comentário no arquivo de modelo. Isso torna o processo de aprendizado do algoritmo mais rápido. Para usar esse parâmetro, você também deve especificar um arquivo de modelo com o parâmetro TemplateFile .

Tipo:SwitchParameter
Aliases:UT
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

Entradas

String

Saídas

PSCustomObject

Observações

O Windows PowerShell inclui os seguintes aliases para ConvertFrom-String:

  • CFS