Strings em PowerShell são provavelmente o tipo de dado mais utilizado no PowerShell. Desde exibir mensagens, solicitar entrada ou enviar dados para arquivos, é quase impossível escrever scripts sem o envolvimento de strings.
Neste artigo, você aprenderá que strings não são apenas para leitura e exibição. Elas também podem ser manipuladas para se adequarem ao propósito da tarefa para a qual você pode estar escrevendo o script. Por exemplo, substituir caracteres ou palavras inteiras, concatenar strings para formar uma nova string, ou até mesmo dividir uma string em várias.
Compreendendo as Strings
De acordo com a definição da .NET de string – “Uma string é uma coleção sequencial de caracteres usada para representar texto”. Em resumo, enquanto houver uma sequência de caracteres formando um texto, há uma string.
Definindo Strings do Sistema no PowerShell
As strings são definidas ao envolver uma série de caracteres entre aspas simples ou duplas. Abaixo estão exemplos de uma string.
As strings são, na verdade, System.Strings na .NET.
Como você pode ver no exemplo acima, a primeira string está entre aspas simples e a segunda string está entre aspas duplas. Se você estiver se perguntando, a única diferença entre as duas é que as strings entre aspas duplas suportam expansão de string, enquanto as aspas simples representarão apenas strings literais.
Para confirmar o conceito de aspas simples vs. aspas duplas, ao colar ambas as strings do exemplo acima no PowerShell.
A captura de tela abaixo mostra que uma string entre aspas simples retorna exatamente a string literal que foi definida. Enquanto a string entre aspas duplas retorna a string com o resultado da expressão do cmdlet Get-Date
.

O resultado mostrado acima demonstra a distinção de quando é apropriado usar aspas simples ou duplas ao definir strings.
O Objeto de String
Conforme declarado na seção anterior, a coleção de caracteres que forma um texto é uma string. O valor resultante da string é o objeto String. O objeto String é um objeto .NET do tipo [System.String].
E como System.String é um objeto, ele possui propriedades que você pode acessar usando o cmdlet Get-Member
. Abaixo, estamos inserindo uma variável dentro de uma string com aspas duplas.
A captura de tela abaixo mostra o TypeName e a lista parcial de propriedades do objeto String.

Concatenando Strings no PowerShell
A concatenação de strings é descrita como a união de duas ou mais strings, essencialmente criando um objeto de string a partir de vários objetos de string separados. Existem vários métodos no PowerShell para concatenar strings. Cada método é diferente, e qual usar depende de como você planeja implementar a concatenação de strings.
A typical example of using string concatenation in the real world is Active Directory user creation. Perhaps you’re creating a user creation script that takes the first name, last name, and department values from a list.
Utilizando a concatenação de strings, você pode formular a convenção padrão de nomes para o nome, nome de exibição, nome de usuário e endereço de e-mail. Para este exemplo, você estará trabalhando com as strings mostradas abaixo. Copie o código abaixo e cole em sua sessão do PowerShell.
Usando os valores variáveis de exemplo acima, o objetivo é derivar os seguintes valores listados abaixo concatenando as strings.
- Nome = primeiro nome sobrenome
- Nome de Exibição = primeiro nome sobrenome (departamento)
- SamAccountName = primeiro.nome
- Endereço de E-mail = [email protected]
Nas próximas seções, os valores listados acima serão criados usando os diferentes métodos de concatenação de strings disponíveis no PowerShell.
Vamos começar!
Usando o Operador de Concatenação de Strings do PowerShell
As linguagens de programação têm seus próprios operadores de concatenação de strings usados para concatenar strings. Por exemplo, no Visual Basic, o método de concatenação é o sinal de e comercial (&
). O PowerShell também possui seu próprio método de concatenação, que é o sinal de adição (+
).
Usando o operador de concatenação de strings, você pode concatenar strings usando o código abaixo.
Usando a Expansão de Strings do PowerShell
O uso da expansão de strings pode ser o método que resulta no código mais curto ao concatenar strings. Você verá no código abaixo que tudo o que é necessário é organizar as strings conforme devem aparecer e colocá-las entre aspas duplas.
Então, o PowerShell interpreta e manipula a expansão de strings dentro da string entre aspas duplas para produzir a string concatenada como resultado. Você pode consultar a saída de exemplo abaixo.

Usando o Operador de Formatação do PowerShell
O operador de formatação (-f
) é principalmente usado para formatação composta. O que é importante lembrar é que, com este método, há três partes ao usar -f
.
Consulte a terceira linha do código abaixo. O "{0} {1}"
representa o formato e os espaços reservados. Os números entre chaves indicam o índice da string na coleção a ser exibida em seu lugar. As aspas podem ser simples ou duplas.
A coleção de strings como entrada neste exemplo é representada por $primeironome,$ultimonome
. Isso significa que o índice da variável $primeironome
é 0, enquanto o do $ultimonome
é 1.
Finalmente, -f
é o local entre o espaço reservado e o conjunto de strings representadas por (-f
).
O código acima resultará nos resultados mostrados abaixo.

Usando o Operador -Join
do PowerShell
O operador -Join
pode ser usado para unir strings em uma única string de duas maneiras.
A primeira maneira de usar -Join
é seguindo-o com o array de strings que você deseja concatenar. O operador -Join
não fornece uma opção para adicionar um delimitador. Todas as strings no array serão coladas juntas sem nada no meio.
A segunda maneira de usar o operador -Join
é especificar o delimitador a ser usado. O array de strings será unido, mas o caractere delimitador especificado será inserido entre cada string.
Voltando ao objetivo de concatenar strings, o código abaixo demonstra como usar o operador -Join
para juntar strings.
Quando você executa o código de exemplo acima no PowerShell, você esperaria ver uma saída semelhante à mostrada abaixo.

O Método String.Format()
do .NET
O método String.Format do .NET é o equivalente do .NET do Operador de Formatação do PowerShell. Funciona da mesma forma que o operador de formatação, onde é necessário especificar o formato e os espaços reservados.
A captura de tela abaixo mostra o Método String.Format em ação.

O Método String.Concat()
do .NET
Outro método para concatenar strings é usar o Método String.Concat do .Net. O Método String.Concat do .NET é o equivalente do .NET do Operador de Concatenação de Strings do PowerShell (+
). Mas, em vez de usar o sinal + para unir strings, você pode adicionar todas as strings dentro do método assim – [string]::Concat(string1, string2...)
.
A captura de tela abaixo demonstra o resultado da invocação do método .NET String.Concat. Você pode ver que o PowerShell fundiu string1, string2.

O Método .NET String.Join()
O método .NET String.Join é o equivalente do método .NET do Operador de Junção do PowerShell (-join
). O formato para este método é [string]::Join(<delimitador>,<string1>,<string2>,...)
.
O primeiro item dentro do método -Join
é sempre o delimitador. Em seguida, os valores dos itens subsequentes são as strings que você deseja concatenar. Veja o exemplo de código abaixo. Lembre-se, o primeiro item é sempre o delimitador. Se você não deseja adicionar um delimitador, então você pode especificar isso —> ''
.

Dividindo Strings no PowerShell
Você viu vários métodos diferentes para concatenar strings na seção anterior. Nesta seção, você aprenderá sobre as diferentes maneiras de usar o PowerShell para dividir strings. Dividir strings é a ação inversa da concatenação.
Você pode dividir strings no PowerShell de duas maneiras diferentes – a função/método split()
ou o operador split
.
Dividindo Strings com o Método Split()
Se você procura uma maneira simples de dividir uma string e criar um array, não procure mais do que o método split()
. O método split()
está presente em todos os objetos de string e é capaz de dividir uma string em um array com base em um caractere de non-regex.
Por exemplo, se você tem uma string como green|eggs|and|ham
e gostaria de criar um array como @('green','eggs','and','ham')
, você pode dividir essa string usando o símbolo de pipe (|
) como no seguinte trecho de código.
Em seguida, você verá que o PowerShell dividiu a string no array desejado com o símbolo de pipe.
O método split()
é uma maneira simples de dividir strings, mas é limitado. O método split()
não permite dividir strings usando expressões regulares. Se você precisa de recursos mais avançados para dividir uma string, você precisará aprender sobre o operador split
.
O operador -split
O principal operador que pode ser usado para dividir strings no PowerShell é o operador -Split
. Usando o operador -Split
, as strings são divididas entre espaços em branco por padrão, ou com caracteres delimitadores específicos.
Abaixo está a sintaxe do operador -Split
para sua referência. Lembre-se de observar a diferença entre a divisão unária e binária.
Neste exemplo, a variável $string
contém o valor de uma string de uma única linha. Em seguida, com o operador -Split
, a string de uma única linha será dividida em um array de strings do PowerShell. A string dividida resultante é salva na variável $split
.
Como pode ser visto a partir do resultado acima, o que era originalmente uma única string foi dividido em 7 substrings. Isso demonstra como o PowerShell divide uma string em um array.
O Delimitador de Caracteres
No exemplo anterior, o operador -Split
dividiu o objeto de string única em várias substrings mesmo sem especificar um delimitador; isso ocorre porque o delimitador padrão do operador -Split
é o espaço em branco. No entanto, os delimitadores também podem ser caracteres, strings, padrões ou blocos de script.
Neste exemplo, o delimitador usado é o ponto e vírgula ;
.
Ao testar o código acima no PowerShell, você obterá o seguinte resultado abaixo.

Você percebe a partir da saída acima que o caractere delimitador foi omitido completamente das substrings resultantes.
Se, por algum motivo, você precisar reter o caractere delimitador, o delimitador pode ser retido ao incluir o caractere entre parênteses.
Após modificar o delimitador de divisão, como mostrado acima, executá-lo resultaria na saída mostrada abaixo.

O resultado acima mostra que os caracteres delimitadores não são omitidos e são contados nas substrings resultantes.
O Delimitador de String
As strings também podem ser divididas por outra string como delimitador. Neste exemplo, a string “dia” é usada como delimitador.
O Delimitador de Bloco de Script
A scriptBlock as the delimiter enables the -Split operator to perform custom or complex splitting of strings.
Nos exemplos anteriores, o caractere ou string delimitador é usado para dividir as strings. Com o uso de um bloco de script, você pode criar uma expressão que utiliza efetivamente mais de um delimitador.
O exemplo abaixo usa a expressão {$PSItem -eq 'e' -or $PSItem -eq 'y'}
, o que significa que a string será dividida se o caractere de entrada for 'e'
ou 'a'
.
E quando você executar este comando acima, a saída será substrings que são divididas com os caracteres delimitadores especificados na expressão no bloco de script.

Este próximo exemplo faz um pouco mais com um bloco de script. Desta vez, a expressão avalia se:
- O caractere de entrada passa como um inteiro; e
- Que seu valor seja maior que 1
Se o resultado da avaliação for verdadeiro, então o operador -Split
usará esse caractere como delimitador. Além disso, a manipulação de erros é adicionada para garantir que os erros sejam filtrados.
Após executar o código mostrado acima, a expectativa é que a string seja dividida no local onde o valor do caractere pode ser convertido como um inteiro com um valor maior que 1. Abaixo mostra a saída esperada.

O Delimitador RegEx
Por padrão, o operador -Split
usa correspondência RegEx com o delimitador especificado. Isso significa que você também pode usar RegEx como delimitadores para dividir strings.
Neste próximo exemplo, a string contém caracteres de palavras e caracteres não alfanuméricos. O objetivo é dividir a string com qualquer caractere não alfanumérico. Em RegEx, os caracteres não alfanuméricos são representados por \W
, enquanto os caracteres de palavra que correspondem a esses caracteres – [a-zA-Z0-9_]
– são representados por \w
.
Limitando Substrings
Também é possível impedir que o operador -Split
divida uma string em várias substrings. A opção que pode ser usada para limitar o resultado da substring é o parâmetro <Max-substrings>
.
Quando você se refere à sintaxe do -Split, o parâmetro <Max-substrings>
é o parâmetro que segue diretamente o parâmetro <Delimited>
. A sintaxe é mostrada novamente abaixo para referência.
Seguindo a sintaxe acima, o código de exemplo abaixo é modificado para limitar o número de divisões/substrings para 3.
E, ao executar o código acima, o resultado é este abaixo. Como você pode ver no resultado abaixo, a string foi dividida em apenas três substrings. Os delimitadores restantes foram ignorados.

Agora, se você quiser limitar as substrings, mas de forma reversa, você pode alterar o valor do parâmetro <Max-substrings>
para um valor negativo. Neste próximo exemplo, o <Max-substrings>
é alterado para -3
.
E como resultado do código modificado acima, a string foi dividida a partir dos últimos três delimitadores correspondentes.

Encontrar e Substituir Strings
Nesta seção, você aprenderá sobre os dois métodos que podem ser usados para procurar e realizar uma substituição de string no PowerShell. O método Replace()
e o operador -Replace
.
O Método Replace()
O objeto de string também possui um método incorporado que pode ajudar a realizar operações de pesquisa e substituição – o método replace()
. O método replace()
aceita no máximo quatro sobrecargas.
O conjunto aceitável de sobrecargas para o método replace()
está listado abaixo.
As únicas sobrecargas necessárias são <original>
e <substitute>
. <ignoreCase>
e <culture>
são opcionais.
No exemplo abaixo, o código procurará todas as instâncias do caractere vírgula (,
) e as substituirá por ponto e vírgula (;
).
Além de substituir apenas um caractere, você também pode usar o método replace()
para buscar e substituir strings. O código de exemplo abaixo substitui a palavra “day” por “night”.

replace()
methodO Operador -Replace
A sintaxe para o operador de substituição é mostrada abaixo.
Usando a sintaxe acima, o código de exemplo abaixo substitui a palavra “day” por “Night” com o operador -replace
.

-replace
operatorEste próximo exemplo utiliza uma correspondência de RegEx para substituir cadeias de caracteres com o operador -replace
. O código abaixo procura na cadeia de caracteres de formato livre (here-string) a cadeia que corresponde a (#.
) e substitui-as por nada.

-replace
Extraindo Cadeias de Cadeias
O objeto de cadeia de caracteres tem um método chamado SubString()
. O método SubString()
é utilizado para extrair cadeias de caracteres dentro de cadeias de caracteres em locais específicos. A sintaxe para o método SubString()
é mostrada abaixo.
O startIndex
é o índice de posição onde o método SubString()
iniciaria a pesquisa. O parâmetro length
indica o número de caracteres a serem retornados a partir do startIndex
. O parâmetro length
é opcional e, se não for utilizado, o método SubString()
retornará todos os caracteres.
Extraindo uma Subcadeia de uma Posição de Início e um Comprimento Fixo
O código de exemplo abaixo recupera a parte do valor de cadeia de caracteres $guid
começando pelo índice 9 e retorna exatamente os 5 caracteres que seguem.
Extraindo uma Subcadeia de uma Posição de Início Dinâmica
Este próximo exemplo demonstra como você pode usar a propriedade de comprimento da cadeia de caracteres do PowerShell para definir dinamicamente um índice de início.
O código abaixo faz o seguinte:
- Obtém o comprimento do objeto de cadeia de caracteres.
- Obtém o índice do índice médio dividindo o comprimento por 2.
- Usa o índice do meio como índice inicial da substring.
Como o valor do length
não foi especificado, o método Substring()
retornou todos os caracteres a partir do índice inicial.

Comparando Strings no PowerShell
Também é possível usar o PowerShell para comparar strings, utilizando os métodos integrados do objeto string como CompareTo()
, Equals()
e Contains()
. Ou utilizando os operadores de comparação do PowerShell (operadores de comparação).
Usando o método CompareTo()
O método CompareTo()
retorna um valor de 0 se as duas strings tiverem o mesmo valor. Por exemplo, o código abaixo compara dois objetos string.
E como os valores são iguais, o resultado deve ser 0, como mostrado abaixo.

CompareTo()
method to compare stringsUsando o método Equals()
e o operador -eq
O método Equals()
e o operador -eq
podem ser usados para verificar se o valor das duas strings é igual.
O exemplo abaixo usa o método Equals()
para comparar os valores de $string1
e $string2
.
O código acima deve retornar False
porque os valores de $string1
e $string2
não são iguais um ao outro.

Equals()
methodO próximo exemplo de código abaixo usa o operador -eq
para comparar os valores de $string1
e $string2
.
Como você pode ver no resultado abaixo, o resultado ao usar -eq
e o método Equal()
são os mesmos.

-eq
operatorUsando o Método Contains()
Neste exemplo, as duas strings estão sendo comparadas verificando se a string do PowerShell contém a substring de outra string.
O código abaixo mostra que os valores de $string1
e $string2
não são iguais. No entanto, o valor de $string2
é uma substring de $string1
.
O resultado do código acima deve ser True
, como mostrado abaixo.

Contains()
method