A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.
Relacionado: Aprenda o Formato de String e Expansão de Strings
Anunciando um treinamento AO VIVO gratuito – Iniciando sua Jornada com PowerShell – apresentado por Johan Arwidmark. Entenda como as habilidades em PowerShell podem melhorar sua carreira de TI, aprenda por onde começar com PowerShell, crie seus primeiros scripts e faça perguntas diretamente ao Johan em um ambiente de treinamento ao vivo.
PowerShell e Strings
No mundo do PowerShell, uma string consiste em um conjunto de caracteres envolvidos por aspas simples ou duplas. Strings como "foo"
e 'bar'
são extremamente comuns.
Relacionado: Voltando ao Básico: Strings em PowerShell
Vamos dizer que você definiu uma string em uma variável e só precisa encontrar uma parte dela? Por exemplo, digamos que você tenha uma string com um endereço como 1234 4th St. Você gostaria de extrair o número e sabe que os quatro primeiros caracteres sempre serão o número que você precisa. Neste caso, você pode usar o método substring()
do PowerShell.
Usando o Método SubString do PowerShell
Para encontrar uma string dentro de outra string com o PowerShell, você pode usar o método Substring()
. Este método é encontrado em todo objeto de string no PowerShell.
Por exemplo, talvez você tenha uma string como O rápido raposo marrom pulou sobre a cerca.
Você gostaria de encontrar os primeiros cinco caracteres. Você poderia fazer isso usando o método Substring()
assim:
O primeiro argumento a passar para o método Substring()
é a posição do caractere mais à esquerda. Neste caso, o caractere mais à esquerda é T
. O segundo argumento é a posição do caractere mais à direita. Neste caso, o caractere é q
.
O método Substring()
retorna todos os caracteres entre eles.
Aqui está um exemplo do mundo real:
Vamos dizer que temos um código de produto que tem o seguinte formato: XXXXVVVV-MM-DD-YYYY
. Todos os produtos têm este formato de código e nunca se desviam dele. Agora, vamos dizer que o software de gerenciamento de inventário que gerou este código não incluiu um campo de data de criação no banco de dados.
No entanto, o software sempre colocou esta data como MM-DD-YYYY
no próprio código do produto, então podemos inferir isso a partir do código do produto. Precisamos obter esta data para nossos produtos para criar algum relatório super-fancy, mas extremamente desnecessário para a administração mostrar quando cada produto foi inserido no banco de dados. Aqui está uma boa maneira de fazer isso.
Neste exemplo, estamos usando o método Substring()
do PowerShell para o objeto de string inerente e passando o número do primeiro caractere que queremos encontrar como parâmetro.
Uma vez que não estamos especificando o caractere de parada, ele assume que queremos todos os caracteres até o final da string. Para encontrar o número em primeiro lugar, primeiro obtemos o comprimento de todo o código do produto e simplesmente subtraímos 10 disso. Neste exemplo, isso significa que queremos começar no 10º caractere da direita da string e tudo à direita disso.
O tipo [DateTime]
não necessariamente se encaixa no tópico de subcadeia da postagem, mas achei que combinaria bem com o exemplo específico.
Depois de obtermos nossa string de 11-12-2013, então a convertemos para um objeto [DateTime]
, que converte o que era uma string simples em um objeto útil. A partir daqui, podemos fazer toda a gestão de aritmética de datas que a gerência deseja e gerar esse relatório de gráfico de barras sofisticado!
Encontrando Dinamicamente uma Subcadeia Usando a Propriedade Length
No exemplo acima, você estava definindo estaticamente as posições de início e fim dos caracteres dentro da string. Mas e se você não souber a última posição?
Talvez você precise encontrar a subcadeia a partir dos últimos quatro caracteres. Você precisa encontrar o conjunto de caracteres da quarta posição até o final. A string em que você está procurando pode ter qualquer comprimento.
Em vez de definir a posição final como um número positivo que conta da esquerda, podemos especificar dinamicamente a posição final usando o comprimento da string e deduzindo um certo número de caracteres dele.
Usando a string acima `$product_code = ‘ABCD1234-11-12-2013’`, talvez você queira encontrar os últimos quatro caracteres. Em vez de fazer algo assim:
Você pode substituir `0` por `$product_code.Length – 4` e nem usar a posição final e ele retornará os últimos quatro caracteres conforme mostrado abaixo.
Se você não especificar a posição final, o método de substring do PowerShell sempre será padrão para a última posição de caractere.
Usando a propriedade `length` da string, que é o número total de caracteres na string e deduzindo desse total permite que você selecione dinamicamente substrings.
Anunciando um Treinamento AO VIVO gratuito – Iniciando sua Jornada PowerShell – apresentado por Johan Arwidmark. Entenda como as habilidades do PowerShell aprimoram sua carreira de TI, aprenda por onde começar com o PowerShell, construa seus primeiros scripts e faça perguntas diretamente a Johan em um ambiente de treinamento ao vivo.