Zoekopdrachten op Substrings in PowerShell: Snelle Gids

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.

Gerelateerd: Leer de string-indeling en het uitbreiden van strings

Aankondiging van een Gratis LIVE training – Begin je PowerShell-reis – gepresenteerd door Johan Arwidmark. Begrijp hoe PowerShell-vaardigheden je IT-carrière versterken, leer waar te beginnen met PowerShell, bouw je eerste scripts en stel direct vragen aan Johan in een live trainingsomgeving.

PowerShell en Strings

In de PowerShell -wereld bestaat een string uit een reeks tekens tussen enkele of dubbele aanhalingstekens. Strings zoals "foo" en 'bar' zijn zeer gebruikelijk.

Gerelateerd: Terug naar de basis: PowerShell-strings

Stel dat je een string hebt gedefinieerd in een variabele en alleen een deel ervan wilt vinden? Bijvoorbeeld, stel dat je een string hebt met een adres zoals 1234 4th St. Je wilt het nummer eruit halen en weet dat de eerste vier tekens altijd het nummer zijn dat je nodig hebt. In dit geval kun je de PowerShell substring()-methode gebruiken.

Het gebruik van de PowerShell SubString-methode

Om een string in een string met PowerShell te vinden, kun je de Substring()-methode gebruiken. Deze methode is te vinden op elk stringobject in PowerShell.

Bijvoorbeeld, misschien hebt u een string zoals De snelle bruine vos sprong over het hek. en wilt u de eerste vijf tekens vinden. U kunt dat doen met de Substring()-methode als volgt:

$string = 'The quick brown fox jumped over the fence.'
$string.Substring(0,5)

Het eerste argument dat u aan de Substring()-methode moet doorgeven, is de positie van het meest linkse karakter. In dit geval is het meest linkse karakter D. Het tweede argument is de positie van het meest rechtse karakter. In dit geval is het karakter q.

De Substring()-methode retourneert alle tekens daartussen.

Hier is een voorbeeld uit de echte wereld:

Latens zeggen dat we een productcode hebben met het volgende formaat: XXXXVVVV-MM-DD-YYYY. Alle producten hebben dit codeformaat en wijken er nooit van af. Stel dat de voorraadbeheersoftware die deze code heeft gegenereerd, geen veld met de aangemaakte datum in de database heeft opgenomen.

De software plaatst echter altijd deze datum als MM-DD-YYYY in de productcode zelf, zodat we dit kunnen afleiden uit de productcode. We moeten deze datum voor onze producten verkrijgen om een ​​zeer chique maar uiterst onnodig rapport voor het management te maken om te laten zien wanneer elk product in de database is ingevoerd. Hier is een goede manier om dit te doen.

$product_code = 'ABCD1234-11-12-2013'
$date_created = [DateTime]$product_code.SubString($product_code.Length-10)

In dit voorbeeld gebruiken we de PowerShell SubString()-methode voor het inherente stringobject en geven het nummer door voor het eerste karakter dat we willen vinden als de parameter.

Aangezien we het stopkarakter niet specificeren, gaat het ervan uit dat we alle tekens tot het einde van de string willen hebben. Om het nummer in de eerste plaats te vinden, krijgen we eerst de lengte van de volledige productcode en trekken er gewoonweg 10 van af. In dit voorbeeld betekent dit dat we willen beginnen bij het 10e teken van rechts van de string en alles rechts daarvan willen hebben.

Het type [DateTime] past niet per se bij het substring-onderwerp van de post, maar ik dacht dat het mooi zou passen bij het specifieke voorbeeld.

Nadat we onze string van 11-12-2013 hebben gekregen, converteren we deze vervolgens naar een [DateTime]-object, wat de eerder domme string omzet in een mooi object. Vanaf hier kunnen we alle fancy datumrekenkunde doen die management van ons wil doen en dat mooie staafdiagramrapport genereren!

Dynamisch een subreeks vinden met behulp van de Length-eigenschap

In het bovenstaande voorbeeld definieerde je statisch de start- en eindposities van de tekens binnen de string. Maar wat als je de laatste positie niet weet?

Misschien moet je de subreeks vanaf de laatste vier tekens vinden. Je moet de set tekens vinden vanaf de vierde tot de laatste positie helemaal tot het einde. De string waarin je zoekt, kan elke lengte hebben.

In plaats van de eindpositie te definiëren als een positief getal dat van links naar rechts telt, kunnen we dynamisch de eindpositie specificeren door de lengte van de string te gebruiken en daar een bepaald aantal tekens van af te trekken.

Gebruikmakend van de bovenstaande string $product_code = 'ABCD1234-11-12-2013', wil je misschien de laatste vier tekens vinden. In plaats van iets als dit te doen:

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString(0,4)
ABCD

Je kunt 0 vervangen door $product_code.Length - 4 en zelfs de eindpositie helemaal niet gebruiken, en het zal de laatste vier tekens teruggeven zoals hieronder getoond.

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString($product_code.Length-4)
2013

Als je de eindpositie niet specificeert, zal de PowerShell substring-methode altijd standaard naar de laatste tekenspositie gaan.

Het gebruik van de length-eigenschap van de string, wat het totale aantal tekens in de string is, en daarvan aftrekken, stelt je in staat om dynamisch substrings te selecteren.

Aankondiging van een Gratis LIVE training – Begin uw PowerShell-reis – gepresenteerd door Johan Arwidmark. Begrijp hoe PowerShell-vaardigheden uw IT-carrière verbeteren, leer waar te beginnen met PowerShell, bouw uw eerste scripts en stel Johan direct vragen in een live trainingsomgeving.

Source:
https://adamtheautomator.com/powershell-substring/