PowerShell Universal lader brugere oprette API’er med PowerShell. API’erne kan bruges til at oprette webhooks, integrere med andre systemer eller stille en REST API til rådighed for dine PowerShell-scripts. I indlægget ser vi på nogle ændringer, du kan lave for at forbedre ydeevnen for API-endpoints.
I indlægget har vi brugt West Wind WebSurge til at teste API-ydeevnen. Værktøjet lader dig sende et antal forespørgsler til en URL og måle forespørgslernes ydeevne. Vi kører en test på 60 sekunder med 10 tråde.
Til testen kører vi en ulicenseret version af PowerShell Universal med et enkelt API-endpoint. Endpointet er et enkelt script, der returnerer en streng.
New-PSUEndpoint -Url "/hello" -Method @('GET') -Endpoint {
"hello"
}
Vi bruger LiteDB til persistens.
Opdater til 4.1.5 eller nyere
Det første, du kan gøre, er at opdatere til PowerShell Universal 4.1.5 eller nyere. Versionen indeholder en række ydelsesforbedringer af API-systemet. Med standardindstillinger ser vi en forbedring af API-ydeevnen på omkring 300 % i udgivelsen.
Resultater:
- 4.1.4 med standardindstillinger: 150 forespørgsler pr. sekund
- 4.1.5 med standardindstillinger: 470 forespørgsler pr. sekund
Juster logningsmål og indstillinger for systemloggen
Som standard har PowerShell Universal uddybende logge konfigureret. Vi laver følgende ændringer i logningskonfigurationen.
Slå uddybende systemlogge fra
I appsettings.json sætter du SystemLogLevel til Error i stedet for Verbose.
{
"SystemLogPath": "%ProgramData%\\PowerShellUniversal\\systemLog.txt",
"SystemLogLevel": "Error"
}
Slå logning i bruger-scope fra for API’er
I stedet for at sende logbeskeder til databasen og filsystemet slår vi logning i bruger-scope fra for API’er. Du kan sende logbeskeder for bestemte funktioner, for eksempel Apps.
New-PSULoggingTarget -Type "Database" -Properties @{
} -Feature "App"
New-PSULoggingTarget -Type "File" -Properties @{
path = "C:\ProgramData\PowerShellUniversal\log.txt"
} -Feature "App"
Det er også muligt at sænke logniveauet for målene i stedet for at slå dem helt fra.
New-PSULoggingTarget -Type "Database" -Properties @{
} -Level "Error"
New-PSULoggingTarget -Type "File" -Properties @{
path = "C:\ProgramData\PowerShellUniversal\log.txt"
} -Level "Error"
Resultater:
- 4.1.4: 980 forespørgsler pr. sekund
- 4.1.5: 1.200 forespørgsler pr. sekund
Miljøindstillinger
Visse funktioner i PowerShell Universal-miljøer kan påvirke ydeevnen. Vi laver følgende ændringer i miljøindstillingerne.
Vedvarende runspaces
Det tager tid at nulstille runspace-tilstanden, så du kan forbedre ydeevnen ved at undgå det. Bemærk, at vedvarende runspaces beholder værdien af variabler, funktioner og aliasser, der er defineret under kørslen af endpointet. Afhængigt af hvordan dit endpoint er implementeret, er det ikke altid ønskeligt.
Hæv det maksimale antal runspaces
Som standard opretter PowerShell Universal 25 runspaces pr. miljø. Vi hæver det til 100. Det øger hukommelsesforbruget, men forbedrer ydeevnen en smule.
New-PSUEnvironment -Name "Integrated" -Version "7.3.6" -Path "Universal.Server" -Variables @('*') -PersistentRunspace -MaxRunspaces 100 -Description "An environment for running scripts directly in the PowerShell Universal server."
Resultater:
- 4.1.4: 1.025 forespørgsler pr. sekund
- 4.1.5: 1.300 forespørgsler pr. sekund
En bemærkning om eksterne miljøer
Ovenfor kan du se, at vi bruger det integrerede miljø. Det er et miljø, der er indbygget i PowerShell Universal. Det er et PowerShell-miljø, der kører direkte i PowerShell Universal-processen. Selv hvis vi justerede endpointene til at bruge et eksternt miljø, er resultaterne de samme. Det her kører i et PowerShell 7.3.7-miljø.
- 4.1.4: 1.015 forespørgsler pr. sekund
- 4.1.5: 1.250 forespørgsler pr. sekund
Brug SQL-persistens
SQL-persistens kan forbedre API-gennemstrømningen markant. Testen blev kørt mod en lokal SQL-database med alle indstillingerne ovenfor og kun på version 4.1.5.
Resultater:
- 4.1.5: 2.900 forespørgsler pr. sekund
Konklusion
Med ændringerne har vi forbedret ydeevnen af vores API med omkring 1.900 %. Vi er gået fra 150 forespørgsler pr. sekund til omkring 2.900 forespørgsler pr. sekund. SQL-persistens gav den største ydelsesstigning. Særligt kombineret med ændringer i logningssystemet kan du opnå en markant bedre ydeevne.
Skriv endelig med feedback eller spørgsmål i forummet.
Klar til at bygge? Download PowerShell Universal.

Adam Driscoll