Strings no 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 que strings estejam envolvidas.
Neste artigo, você aprenderá que strings não servem apenas para leitura e exibição. Elas também podem ser manipuladas para se adequarem ao propósito de qualquer tarefa para a qual você esteja escrevendo o script. Como, 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 do .NET para 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
Strings são definidas ao envolver uma série de caracteres entre aspas simples ou duplas. Abaixo estão exemplos de uma string.
Na verdade, as Strings são do tipo System.Strings no .NET.
Como você pode ver no exemplo acima, a primeira string é envolvida por aspas simples e a segunda por aspas duplas. Se você estiver se perguntando, a única diferença entre as duas é que strings em 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 String
Como mencionado 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 o método a ser usado 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.
Usando a concatenação de strings, você pode formular a convenção de nomenclatura padrão 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 este código abaixo e cole-o em sua sessão do PowerShell.
Usando os valores de variáveis de exemplo acima, o objetivo é derivar os seguintes valores listados abaixo concatenando strings.
- Nome = primeironome sobrenome
- NomeExibicao = primeironome sobrenome (departamento)
- NomeSamAccount = primeironome.sobrenome
- EnderecoEmail = [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 seu próprio operador de concatenação de strings usado 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 mais (+
).
Usando o operador de concatenação de strings, você pode concatenar strings usando o código abaixo.
Usando a Expansão de Strings no 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 na ordem em que devem aparecer e envolvê-las entre aspas duplas.
Então, o PowerShell interpreta e manipula a expansão de strings dentro da string entre aspas duplas para gerar a string concatenada como resultado. Você pode consultar a saída de exemplo abaixo.

Usando o Operador de Formato no PowerShell
O operador de formato (-f
) é principalmente usado para formatação composta. O que é importante lembrar com este método é que 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 de entrada neste exemplo é representada por $nome, $sobrenome
. Isso significa que o índice da variável $nome
é 0, enquanto o $sobrenome
é 1.
Finalmente, `-f
` é o local entre o espaço reservado e o conjunto de strings representado 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 conjunto de strings que você deseja concatenar. O operador -Join
não oferece uma opção para adicionar um delimitador. Todas as strings no conjunto serão unidas sem nada entre elas.
A segunda maneira de usar o operador -Join
é especificar o delimitador a ser usado. O conjunto de strings será unido, mas o caractere de 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, espera ver uma saída semelhante à mostrada abaixo.

O Método String.Format()
do .NET
O método String.Format do .NET é o equivalente no .NET do Operador de Formatação do PowerShell. Ele opera da mesma forma que o operador de formatação, onde o formato e os espaços reservados precisam ser especificados.
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 no .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 mesclou string1, string2.

O Método .NET String.Join()
O método String.Join do .NET é 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 código de exemplo abaixo. Lembre-se, o primeiro item é sempre o delimitador. Se você não quiser adicionar um delimitador, então você pode especificar isso —> ''
.

Dividindo Strings do 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 reversa 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ê está procurando uma maneira simples de dividir uma string e criar um array, não precisa procurar mais além do 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 não-regex.
Por exemplo, se você tiver uma string como green|eggs|and|ham
e quiser criar um array como @('green','eggs','and','ham')
, você pode dividir essa string no símbolo de pipe (|
) como no trecho de código a seguir.
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, 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 o split unário e binário.
Neste exemplo, a variável $string
contém o valor de uma única linha de string. 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 você pode ver pelo 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 ;
.
Quando você testa o código acima no PowerShell, você obterá o resultado abaixo.

Você percebe pelo output 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 envolver o caractere entre parênteses.
Após modificar o delimitador de divisão, como mostrado acima, ao executá-lo resultará no output mostrado abaixo.

O resultado acima mostra que os caracteres delimitadores não são omitidos, e são contabilizados nas substrings resultantes.
O Delimitador de String
Strings também podem ser divididas por outra string como delimitador. Neste exemplo, a string “day” é usada como delimitador.
O Delimitador do 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 efetivamente usa mais de um delimitador.
O exemplo abaixo usa a expressão {$PSItem -eq 'e' -or $PSItem -eq 'a'}
, o que significa que a string será dividida se o caractere de entrada for 'e'
ou 'a'
.
E quando você executa esse 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 é maior que 1
Se o resultado da avaliação for verdadeiro, então o operador -Split
usará esse caractere como delimitador. Além disso, o tratamento de erros é adicionado para garantir que os erros sejam filtrados.
Depois de executar o código mostrado acima, a expectativa é que a string seja dividida no lugar onde o valor do caractere pode ser convertido em um inteiro com um valor maior que 1. O abaixo mostra a saída esperada.

O Delimitador RegEx
Por padrão, o operador -Split
usa a correspondência de RegEx para 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 palavra e caracteres não-palavra. O objetivo é dividir a string com qualquer caractere não-palavra. Em RegEx, caracteres não-palavra são representados por \W
, enquanto caracteres de palavra que correspondem a estes caracteres – [a-zA-Z0-9_]
são representados por \w
.
Limitando Substrings
Também é possível impedir o operador -Split
de dividir uma string em um número de substrings. A opção que pode ser usada para alcançar a limitação do resultado da substring é o parâmetro <Max-substrings>
.
Quando você se refere de volta à sintaxe -Split, o parâmetro <Max-substrings>
é o parâmetro que segue diretamente o parâmetro <Delimitado>
. 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, executando o código acima resulta neste output abaixo. Como você pode ver do output 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ê poderia mudar 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 começando pelos últimos três delimitadores correspondentes.

Localizar e Substituir Strings
Nesta seção, você aprenderá sobre os dois métodos que podem ser usados para buscar 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 integrado que pode ajudar a realizar operações de busca e substituição – o método replace()
. O método replace()
aceita um máximo de quatro sobrecargas.
O conjunto aceitável de sobrecargas para o método replace()
é listado abaixo.
As únicas sobrecargas necessárias são <original>
e <substituto>
. <ignoreCase>
e <culture>
são opcionais.
No exemplo abaixo, o código buscará 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 RegEx para substituir strings com o operador -replace
. O código abaixo procura na here-string pela string que corresponde a (#.
) e substitui ela por nada.

-replace
Extraindo Strings de Strings
O objeto de string tem um método chamado SubString()
. O método SubString()
é usado para extrair strings dentro de strings 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()
iniciará a busca. 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 usado, o método SubString()
retornará todos os caracteres.
Extraindo uma Substring de uma Posição Inicial e um Comprimento Fixo
O código de exemplo abaixo recupera a parte do valor da string $guid
começando pelo índice 9 e retorna exatamente os 5 caracteres que seguem.
Extraindo uma Substring de uma Posição Inicial Dinâmica
Este próximo exemplo demonstra como você pode usar a propriedade de comprimento da string do PowerShell para definir dinamicamente um índice inicial.
O código abaixo faz o seguinte:
- Obtém o comprimento do objeto de string.
- Obtém o índice do índice médio dividindo o comprimento por 2.
- Usa o índice do meio como o índice inicial da substring.
Já que 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
Você pode usar o PowerShell para comparar strings também usando os métodos internos do objeto string, como os métodos CompareTo()
, Equals()
e Contains()
. Ou, usando os operadores de comparação do PowerShell .
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 de string.
E como os valores são os mesmos, o resultado deve ser 0, como mostrado abaixo.

CompareTo()
method to compare stringsUsando o Método Equals()
e -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 Falso
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 -eq
em vez disso para comparar os valores de $string1
e $string2
.
Conforme você pode ver a partir da saída abaixo, o resultado ao usar -eq
e o método Equal()
são iguais.

-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