Många människor gillar att använda PowerShell eftersom det tillåter dem att göra saker som inte kan göras med Windows GUI. Trots det går det inte att förneka att vissa PowerShell-cmdlets kan vara lite tråkiga eller komplicerade. Men tänk om det fanns ett sätt att kunna redigera dessa cmdlets och få dem att "beta sig" som du vill? Tro det eller ej, det finns ett enkelt sätt att göra det. Du kan ändra beteendet för cmdleten genom att ändra värdena för PowerShells standardparametrar. Den här artikeln kommer att visa dig hur du använder PowerShells standardparametrar för att ändra beteendet för cmdlet-kommandot.
Varning
Innan du sätter igång finns det några saker du måste tänka på. Även om det är bekvämt att ändra PowerShells standardparametrar och cmdelt-beteende, kan det leda till problem. Om du kör ett skript och det skriptet antar att den modifierade cmdleten kommer att bete sig på ett visst sätt, kan du få oförutsägbara resultat. Därför bör du se till att ändra PowerShells standardparametrar noggrant.
Snabb genomgång
Det finns två PowerShell-koncept som du måste vara bekant med för att kunna arbeta med standardparametrar. Det första konceptet är variabelt. I PowerShell börjar variabelnamn alltid med ett dollartecken, och du kan skriva innehållet i en variabel genom att skriva variabelnamnet.
Det andra konceptet du kanske känner till är hashtabellen. En hashtabell är i huvudsak en lista som består av nyckel/värdepar. Anta till exempel att du vill skapa en hashtabell som innehåller namnen på amerikanska delstater och deras förkortningar. Nedan är koden:
$StateList = @{}
$StateList.add('Florida','FL')
$StateList.add('South Carolina','SC')
$StateList.add('Georgia','GA')
$StateList
Den första raden med kod skapar en tom hashtabell som heter $StateList . De följande tre raderna lägger till poster i tabellen. Varje post består av en nyckel (tillståndsnamn) och ett värde (tillståndsförkortning). Den sista raden listar tabellens innehåll. Du kan se koden i aktion i bilden nedan.
Detta är bara ett väldigt enkelt exempel och det finns många andra sätt att använda hashtabeller.
Arbeta med PowerShells standardparametrar
PowerShell har en inbyggd variabel som används för att lagra standardparametrar som används med dess cmdlets. Denna variabel kallas $PSDefaultParameterValues . Som du kanske har märkt från den första introduktionen och namnet på variabeln är detta inte en vanlig variabel utan en hashtabell. Men om du anger variabelnamnet i PowerShell kommer du snabbt att se att tabellen är tom, som visas nedan.

Så vad kan vi göra med denna $PSDefaultParameterValues -variabel . Som nämnts ovan kan du styra beteendet för PowerShell-cmdlets. Den enda poängen är att du inte kan övervinna de inneboende funktionerna i cmdlet-kommandot. Så låt oss titta på ett exempel.
Det här exemplet kanske inte är något du vill använda i verkligheten, men det kommer att visa dig hur lätt det är att radikalt ändra cmdlet-beteendet. Om du anger Get-TimeZone- cmdleten i PowerShell, kommer du att se namnet på den tidszon som din dator för närvarande är konfigurerad att använda. Du kan se detta exempel i bilden nedan.

Nu ändrar vi denna cmdlet så att den inte visar den tidszon som systemet är konfigurerat att använda, utan istället de tillgängliga tidszonerna. För att göra detta behöver vi cmdlet-syntax med hjälp av Get-Help- cmdleten följt av Get-TimeZone- cmdleten . Du kan se syntaxen för cmdleten nedan.

Denna syntax innehåller en parameter som heter ListAvailable . Ange kommandot nedan:
$PSDefaultParameterValues.Add(“Get-TimeZone:ListAvailable”,$True)
Den första delen av det här kommandot säger helt enkelt till PowerShell att du vill lägga till ett värde till hash-tabellen, precis som vi gjorde med förkortningsexemplet i USA i föregående avsnitt. Den här hashtabellen innehåller ett nyckel/värdepar. I det här fallet är nyckeln cmdlet-namnet (Get-TimeZone) följt av ett kommatecken och namnet på parametern du vill ställa in. I det här fallet är parameternamnet ListAvailable. Den andra delen av denna cmdlet är värdet du vill tilldela parametern. Här är det $True . ListAvailable-parametern behöver normalt inte ett värde, så att specificera $True är hur du säger till PowerShell att använda denna parameter utan att tilldela ett värde till den.
Om du tittar på bilden nedan ser du vad som händer när du kör Get-TimeZone cmdlet.

Saker att tänka på
Det viktigaste att förstå är att lägga till ett nytt värde för en PowerShell-standardparameter är att ändra standardbeteendet för cmdleten, inte ta bort funktionerna för cmdleten. Även när du ändrar Get-TimeZone cmdlet för att visa tillgängliga tidszoner istället för att visa den aktuella tidszonen. Du kan fortfarande visa den aktuella tidszonsinformationen om du visar mer.
En annan sak du behöver veta är att anpassade standardparametrar kan tas bort. För att ta bort ett enskilt objekt, använd kommandot $PSDefaultParameterValues.Remove följt av namnet på objektet du vill ta bort. Till exempel:
$PSDefaultParameterValues.Remove(“Get-TimeZone:ListAvailable”)
Istället kan du ta bort hela innehållet i hashtabellen med det här kommandot:
$PSDefaultParameterValues.Clear();
Du kan se exempel på båda teknikerna nedan:

Du kan ta bort hela hashtabellen eller ta bort en enda post.
Att ändra standardbeteendet för ett cmdlet-kommando är något du inte gör ofta, men när du behöver det vet du redan hur du ändrar det.
Önskar dig framgång!
Se mer: