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 no PowerShell – apresentado por Johan Arwidmark. Entenda como as habilidades no PowerShell aprimoram sua carreira de TI, aprenda por onde começar com o PowerShell, desenvolva 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 cercados por aspas simples ou duplas. Strings como "foo"
e 'bar'
são extremamente comuns.
Relacionado: De Volta aos Fundamentos: Strings no PowerShell
Vamos dizer que você definiu uma string em uma variável e precisa encontrar apenas 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 saber que os primeiros quatro caracteres sempre serão o número de que você precisa. Nesse 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 cada objeto de string no PowerShell.
Por exemplo, talvez você tenha uma sequência como O rápido e astuto raposa marrom pulou sobre a cerca.
Você gostaria de encontrar os primeiros cinco caracteres. Você pode fazer isso usando o método Substring()
assim:
O primeiro argumento a ser passado 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 supor que temos um código de produto com o seguinte formato: XXXXVVVV-MM-DD-AAAA
. Todos os produtos têm esse formato de código e nunca se desviam dele. Agora, suponha que o software de gerenciamento de inventário que gerou esse código não incluiu um campo de data de criação no banco de dados.
No entanto, o software sempre colocava esta data como MM-DD-AAAA
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 a fim de criar um relatório super sofisticado, mas extremamente desnecessário, para a administração, mostrando 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.
Desde que não estamos especificando o caractere de parada, assume-se que queremos todos os caracteres até o final da string. Para encontrar o número no primeiro lugar, primeiro obtemos o comprimento do código do produto inteiro e simplesmente subtrai 10 desse valor. Neste exemplo, isso significa que queremos começar no décimo caractere da direita para a string e tudo à direita disso.
O tipo [DateTime]
não necessariamente combina com o tópico de substring do post, mas eu pensei que se encaixaria bem com o exemplo específico.
Depois de obtermos nossa string de 11-12-2013, a convertemos para um objeto [DateTime]
, que transforma o que era uma simples string em um objeto útil. A partir daqui, podemos realizar todas as operações de data avançadas que precisamos e gerar esse relatório de gráfico de barras sofisticado!
Encontrando Dinamicamente uma Substring Usando a Propriedade de Comprimento
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 substring dos últimos quatro caracteres. Você precisa encontrar o conjunto de caracteres da quarta posição a partir do final 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 subtraindo 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 mesmo usar a posição final e ele retornará os últimos quatro caracteres como 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 do caractere.
Usando a propriedade length
da string, que é o número total de caracteres na string e subtraindo dessa contagem permite que você escolha 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, crie seus primeiros scripts e faça perguntas diretamente ao Johan em um ambiente de treinamento ao vivo.