Skip to content

Instantly share code, notes, and snippets.

@ThePSAdmin
Forked from Jaykul/ReadMe.md
Last active March 2, 2023 00:25
Show Gist options
  • Save ThePSAdmin/449a17b36d96d83f92dfecdd358ddf4f to your computer and use it in GitHub Desktop.
Save ThePSAdmin/449a17b36d96d83f92dfecdd358ddf4f to your computer and use it in GitHub Desktop.
Kestrel in PowerShell

Trying to get Kestrel to work in PowerShell

This works, sort-of, but for some reason it won't actually serve pages. I get nothing but "The connection was reset" or "can't reach this page"

Before you can run Start-Kestrel, you need to download a bunch of assemblies, and since my example is just trying to serve files, you'll need a file or two...

From an empty folder where you're going to put Start-Kestrel.ps1 we need to install a thousand DLLs or so...

Install-Package Microsoft.AspNetCore.App -ProviderName NuGet -Destination bin -Source nuget.org -Force

We need a static file, we can make one:

New-Item Web\wwwroot -Type Directory -Force
Set-Content Web\wwwroot\view.html -Value @"
<!doctype html>
<html lang="en">
  <head>
    <title>Example View</title>
  </head>
  <body id="grody">
    <h1>Hello World</h1>
  </body>
</html>
"@

Then, just copy Start-Kestrel.ps1 and run it

using namespace System
using namespace System.Collections.Generic
using namespace System.IO
using namespace System.Linq
using namespace System.Threading.Tasks
using namespace Microsoft.AspNetCore
using namespace Microsoft.AspNetCore.Hosting
using namespace Microsoft.Extensions.Configuration
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.AspNetCore.Builder
using namespace Microsoft.AspNetCore.Server.Kestrel.Core
using namespace Microsoft.Extensions.FileProviders
using namespace Microsoft.Extensions.DependencyInjection
using namespace Microsoft.AspNetCore.StaticFiles
pushd $PSScriptRoot
#before I could make a WebHostBuilder I needed these
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Hosting.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.FileProviders.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Configuration.EnvironmentVariables.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll
# before it would .build() I needed these
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Server.Kestrel.Core.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Core.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Server.Kestrel.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Configuration.FileExtensions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.FileExtensions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Http.Features.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.DependencyInjection.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.ObjectPool.2.2.0\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.FileProviders.Physical.2.2.0\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Physical.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Diagnostics.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Diagnostics.Abstractions.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Diagnostics.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Diagnostics.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Http.Extensions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.HttpOverrides.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.HttpOverrides.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Routing.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Routing.Abstractions.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Routing.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Routing.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Server.IISIntegration.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.IISIntegration.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.Server.Kestrel.Https.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Https.dll
add-type -path $PSScriptRoot\bin\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll
add-type -path $PSScriptRoot\bin\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll
add-type -path $PSScriptRoot\bin\Microsoft.Extensions.Configuration.Json.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Json.dll
add-type -path $PSScriptRoot\bin\Microsoft.Extensions.FileSystemGlobbing.2.2.0\lib\netstandard2.0\Microsoft.Extensions.FileSystemGlobbing.dll
add-type -path $PSScriptRoot\bin\Microsoft.Extensions.Logging.Console.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Console.dll
add-type -path $PSScriptRoot\bin\Microsoft.Extensions.Options.ConfigurationExtensions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.ConfigurationExtensions.dll
add-type -path $PSScriptRoot\bin\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll
# # In order to configure static files, we needed...
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.StaticFiles.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.StaticFiles.dll
add-type -Path $PSScriptRoot\bin\Microsoft.Extensions.WebEncoders.2.2.0\lib\netstandard2.0\Microsoft.Extensions.WebEncoders.dll
# In order to .Start() we needed...
add-type -Path $PSScriptRoot\bin\System.IO.Pipelines.4.5.3\lib\netstandard1.3\System.IO.Pipelines.dll
add-type -Path $PSScriptRoot\bin\Microsoft.AspNetCore.Connections.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll
$webroot = Join-Path $PSScriptRoot Web
class Polaris {
[void] Configure([IApplicationBuilder]$app, [IHostingEnvironment]$env) {
Write-Host "Configuring Polaris"
[StaticFileExtensions]::UseStaticFiles($app)
[DefaultFilesExtensions]::UseDefaultFiles($app)
# $DirOptions = [DirectoryBrowserOptions]@{
# FileProvider = [PhysicalFileProvider]::new("C:\Users\Joel\Projects\Modules\TouchPS\Source\Web\")
# RequestPath = "/web"
# }
# [DirectoryBrowserExtensions]::UseDirectoryBrowser($app, $DirOptions)
}
[void] ConfigureServices([IServiceCollection]$svc) {
Write-Host "Configuring Polaris Services"
# [DirectoryBrowserServiceExtensions]::AddDirectoryBrowser($svc)
}
}
$builder = [WebHostBuilder]::new()
$builder = [HostingAbstractionsWebHostBuilderExtensions]::UseContentRoot($builder, $webroot)
$builder = [WebHostBuilderKestrelExtensions]::UseKestrel($builder)
$builder = [WebHostBuilderKestrelExtensions]::ConfigureKestrel($builder,
[Action[WebHostBuilderContext,KestrelServerOptions]]{
param($context, $options)
$options.Limits.MaxConcurrentConnections = 100;
$options.Limits.MaxConcurrentUpgradedConnections = 100;
$options.Limits.MaxRequestBodySize = 10 * 1024;
$options.Limits.MinRequestBodyDataRate = [MinDataRate]::new(100, "00:00:10");
$options.Limits.MinResponseDataRate = [MinDataRate]::new(100, "00:00:10");
$options.Listen([IPAddress]::Loopback, 5000);
})
$builder = [WebHostBuilderExtensions]::UseStartup($builder, [Polaris])
$webhost = $builder.build()
[WebHostExtensions]::Run($webhost)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment