Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

ChristopherGLewis/PowerShellWebServers

Open more actions menu

Repository files navigation

PowerShellWebServers

Sample code for Powershell acting as a web server

Some simple powershell web servers. Inspired by Jan Ka's https://github.com/Jan-Ka/coms, which is inspired by Ben Rady's https://github.com/benrady/shinatra - without the MS vs. Linux bagage :-).

Most of these are pretty silly, with no error handling.

TCPListener-WebServer.ps1

10 lines of code.

The TCP Listener uses System.Net.Sockets.TcpListener and is similar to Jan Ka's, but uses a while loop to surround the blocking $listener.AcceptTcpClient().

Note there's no way to close the connection, and PowerShell seems to hang on a ctrl-break.
I ended up killing the PowerShell.exe process.

c:\GitHub\PowerShellWebServers>powershell -f TCPListener-WebServer.ps1 8001 test1
c:\>\cURL\bin\curl.exe http://localhost:8001 -v
* Rebuilt URL to: http://localhost:8001/
*   Trying ::1...
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8001 (#0)
> GET / HTTP/1.1
> Host: localhost:8001
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
* no chunk, no close, no size. Assume close to signal end
<
test1
* Recv failure: Connection was aborted
* Closing connection 0
curl: (56) Recv failure: Connection was aborted

Curl says that the connection closed ugly, but this certainly works.

HTTPListener-WebServer1.ps1

10 lines of code.

The HTTP Listener uses System.Net.HttpListener, which wraps the incomming connection in a request object.

As with the TCP Listener, there's no way to close the process gracefully.

c:\GitHub\PowerShellWebServers>powershell -f HTTPListener-WebServer1.ps1 8001 Test2
c:\>\cURL\bin\curl.exe http://localhost:8001 -v
* Rebuilt URL to: http://localhost:8001/
*   Trying ::1...
* Connected to localhost (::1) port 8001 (#0)
> GET / HTTP/1.1
> Host: localhost:8001
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Transfer-Encoding: chunked
< Server: Microsoft-HTTPAPI/2.0
< Date: Wed, 07 Dec 2016 15:47:30 GMT
<
Test2* Connection #0 to host localhost left intact

Note that the connection was left intact, and Curl likes this.

HTTPListener-WebServer2.ps1

11 lines of code.

Same listener, with a single line added to close the server after a /kill

c:\GitHub\PowerShellWebServers>powershell -f HTTPListener-WebServer2.ps1 8001 Test3
c:\>\cURL\bin\curl.exe http://localhost:8001 -v
* Rebuilt URL to: http://localhost:8001/
*   Trying ::1...
* Connected to localhost (::1) port 8001 (#0)
> GET / HTTP/1.1
> Host: localhost:8001
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Transfer-Encoding: chunked
< Server: Microsoft-HTTPAPI/2.0
< Date: Wed, 07 Dec 2016 15:53:26 GMT
<
Test3* Connection #0 to host localhost left intact\

c:\>\cURL\bin\curl.exe http://localhost:8001/kill -v
*   Trying ::1...
* Connected to localhost (::1) port 8001 (#0)
> GET /kill HTTP/1.1
> Host: localhost:8001
> User-Agent: curl/7.49.1
> Accept: */*
>
* Recv failure: Connection was reset
* Closing connection 0
curl: (56) Recv failure: Connection was reset

This closes the connection and shuts down powershell.exe somewhat gracefully.

Powershell-WebServer.ps1

This takes the HTTPListener to the extreme, and creates a moderately functioning web server.

You pass a URL to listen on, and a path that's your root (has to end in a '\'), and the script servers up http content.

It's not threaded, and currently doesn't handle mime types other then text, but that could be handled in the Get-HTTPResponse function.

About

Sample code for Powershell acting as a web server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.