in het begin was er een cmdlet…
De meeste keren, als je denkt aan het schrijven van iets in PowerShell, zul je meestal binnen de eerste regels een Get-ChildItem
vinden, zul je dan onvermijdelijk een voor elke lus hebben.
normaal zou ik dit schrijven als foreach($item in $items)
, maar op een keer kwam de autocomplete op de array variabele met een .ForEach
optie, Ik wist niet het juiste gebruik van deze dus probeerde ik de gebruikelijke
Get-Help ForEach -ExamplesGet-Help ForEach -Online
omdat dit deze optie niet echt liet zien (om eerlijk te zijn ben ik misschien niet naar de juiste hulp van ps gegaan), heb ik hetzelfde gegoogeld, wat me in eerste instantie naar een soortgelijke pagina op ss64 bracht.com, maar ze gaven een link naar andere ForEach
opties, waarvan er één bevatte hoe de ForEach (methode)
te gebruiken .ForEach
laten we eens kijken of ik het in code kan uitleggen:
$items.ForEach({# This exposes the $_ object, but I find that it doesn't know what each item is.# So I often find myself setting that to a new variable.$item = $_#I guess as you learn more and more you become versed in the ways of the object and can free type out the properties you need.})
zoals je kunt zien, staat deze vorm van het schrijven van een ForEach nog steeds een multiline statement toe, en zolang je weet welke eigenschappen je bent nadat je nooit het $_ object hoeft in te stellen (maar ik weet dat ik dat zal doen).
pas op voor Dragons
Er is iets om je bewust van te zijn in PowerShell versie 3. Als de $array
null zou kunnen zijn, moet u daarvoor een controle plaatsen voordat u uw acties uitvoert.
if($items -ne $null){...}
Als u PowerShell 2 hebt gebruikt, bent u zich misschien al bewust van dit probleem met arrays.
in PowerShell 3 en hoger behandelt de foreach-lus null array-objecten automatisch, maar het zal pas gebeuren als u PowerShell 5 gebruikt dat de foreach-methode null arrays afhandelt.