Skip to content

Instantly share code, notes, and snippets.

@AyrA
Last active April 13, 2024 14:21
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AyrA/e04c977232a74525f4421cd4cb1a4764 to your computer and use it in GitHub Desktop.
Save AyrA/e04c977232a74525f4421cd4cb1a4764 to your computer and use it in GitHub Desktop.
Powershell HTTP Server
# Portable HTTP file server
# Should be somewhat safe but please don't actually use it.
# You can't exit this with CTRL+C directly and need to use the shutdown command below a directory listing,
# or you can kill the powershell process of course, but this causes the port to stay used sometimes.
# Features
# - Directory Browser
# - Can handle UTF8 URLs
# - Delivers unknown file types
# - /../ attack prevention
# Drawbacks
# - Only one request at a time
# - Only runs on localhost unless it has administrative rights
# - Files loaded completely into memory
Add-Type -AssemblyName System.Web
# Writes a string to a stream that expects a byte array
function Write-String {
$b=[System.Text.Encoding]::UTF8.GetBytes($args[1])
$args[0].Write($b,0,$b.Length)
}
# HTML Encoder
function Html-Encode {
return [System.Web.HttpUtility]::HtmlEncode($args[0])
}
# URL Encoder
function Url-Encode {
return [uri]::EscapeDataString($args[0])
}
# Prevent accidental exit
$nonce = [System.DateTime]::Now.Ticks
# Cheap Directory Jail
New-PSDrive -Name OhGodWhy -PSProvider FileSystem -Root $PWD.Path
# Create and start listener
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:55555/")
$listener.Start()
echo "Http: http://localhost:55555/"
echo "Path: $PWD"
# Open default browser
start "http://localhost:55555/"
# Be able to serve multiple requests
while($listener.IsListening){
$Context = $listener.GetContext()
$URL = $Context.Request.Url.LocalPath
echo "Request: $URL"
if(Test-Path "OhGodWhy:$URL" -PathType Leaf){
echo "Requesting a File"
# Is file, serve it
$Content = Get-Content -Encoding Byte -Path "OhGodWhy:$URL" -ReadCount 0
# This can throw an error on older versions of PowerShell but the web server will still work
$Context.Response.ContentType = [System.Web.MimeMapping]::GetMimeMapping($URL)
$Context.Response.ContentLength = $Content.Length
# Write content as-is
$Context.Response.OutputStream.Write($Content, 0, $Content.Length)
} elseif (Test-Path "OhGodWhy:$URL" -PathType Container) {
if($Context.Request.Url.Query -eq "?$nonce"){
echo "Requesting Server Shutdown"
# Stop listener
$Context.Response.ContentType = "text/html"
Write-String $Context.Response.OutputStream "<h1>The server has been shut down</h1>"
$Context.Response.Close()
# Give the component time to deliver the answer
sleep 1
$listener.Stop()
return
}else{
echo "Requesting Directory listing"
# Is directory, show contents
$Context.Response.ContentType = "text/html; charset=utf-8"
$Context.Response.ContentEncoding = [System.Text.Encoding]::UTF8
# Make it look somewhat nice
Write-String $Context.Response.OutputStream "<style>
*{font-family:monospace;font-size:14pt}
div a{text-decoration:none;display:inline-block;width:49%;padding:5px}
div a:hover{background-color:#FF0}
#sd{color:#F00;text-decoration:none;}</style>"
Write-String $Context.Response.OutputStream "<h1>Directory Listing</h1><div>"
# UP
Write-String $Context.Response.OutputStream "<a href=""../"">&lt;UP&gt;</a><br />"
# Directories above files
Get-ChildItem "OhGodWhy:$URL" | Where-Object { $_.PSIsContainer } | Foreach-Object {
$fn=[System.IO.Path]::GetFileName($_.FullName)
$href=Url-Encode $fn
$fn=Html-Encode $fn
Write-String $Context.Response.OutputStream "<a href=""$href/"">$fn/</a>"
}
Get-ChildItem "OhGodWhy:$URL" | Where-Object { -not $_.PSIsContainer } | Foreach-Object {
$fn=[System.IO.Path]::GetFileName($_.FullName)
$href=Url-Encode $fn
$fn=Html-Encode $fn
Write-String $Context.Response.OutputStream "<a href=""$href"">$fn</a>"
}
# Shutdown
Write-String $Context.Response.OutputStream "</div><hr/>[<a id=""sd"" href=""/?$nonce"">SHUTDOWN</a>]<hr/>"
}
} else {
echo "HTTP 404"
# Not found
$Context.Response.StatusCode = 404;
$Context.Response.ContentType = "text/plain";
Write-String $Context.Response.OutputStream "$URL not found"
}
echo "Done"
# Complete request
$Context.Response.Close()
}
# SIG # Begin signature block
# MIIcUQYJKoZIhvcNAQcCoIIcQjCCHD4CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUSSRLlJF1uZJYBdgVuT7FbzO8
# J2iggheAMIIFCTCCA/GgAwIBAgIQA+dSOtMg37kx2aYXVFlBdzANBgkqhkiG9w0B
# AQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFz
# c3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMB4XDTE4MTEyMTAwMDAwMFoXDTIyMDEy
# NjEyMDAwMFowRjELMAkGA1UEBhMCQ0gxDzANBgNVBAcTBktyaWVuczESMBAGA1UE
# ChMJS2V2aW4gR3V0MRIwEAYDVQQDEwlLZXZpbiBHdXQwggEiMA0GCSqGSIb3DQEB
# AQUAA4IBDwAwggEKAoIBAQDC4GHIAhukvfkIWIRNHp7Fru3egC9W3tOJN3lyHtw5
# viZfaGdAUkCyw7sF2Fjp058uCx0NeAVCJC8EffTIVrmQyumCR0g2xB4FQoFYDiTJ
# vhGVbIGVedvPcKmrWOx7Ir1Wjoc9S/k/f8/vTkNKmB8oZcofA/7MHC3woiN4scpK
# RjrerM/6zsgJnnzM+03QQO1Z5beJk8QDNl2Z3QJAGYNYyi4LBJw1u9951AM2dDbz
# /FGoZVQLX3Iwb2qCrhOO/W7m3qhdlXH1/CZpJmAJgcQ14F0e14FrjOJ3N0VchqDV
# TsUgX580xXbRd7lEtuIAI351i11TP7CBxeyoB5nbDm0/AgMBAAGjggHFMIIBwTAf
# BgNVHSMEGDAWgBRaxLl7KgqjpepxA8Bg+S32ZXUOWDAdBgNVHQ4EFgQU0RwT74dh
# 1Su7zUsnrc51M5y+77kwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
# BwMDMHcGA1UdHwRwMG4wNaAzoDGGL2h0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9z
# aGEyLWFzc3VyZWQtY3MtZzEuY3JsMDWgM6Axhi9odHRwOi8vY3JsNC5kaWdpY2Vy
# dC5jb20vc2hhMi1hc3N1cmVkLWNzLWcxLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
# /WwDATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
# MAgGBmeBDAEEATCBhAYIKwYBBQUHAQEEeDB2MCQGCCsGAQUFBzABhhhodHRwOi8v
# b2NzcC5kaWdpY2VydC5jb20wTgYIKwYBBQUHMAKGQmh0dHA6Ly9jYWNlcnRzLmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURDb2RlU2lnbmluZ0NBLmNy
# dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQDWvCuEumXtpGd4M6DT
# r0CeP8fqhRHs+kVZP57iPQwZKRQZLypYp0NUdyvhtZvobFWKnSAYMqQRf/lSxndv
# cG4zljsYyirWHaEUiCLcE1A7mUau+WO7DVDiwVyB65I/8QVnFCdTyzyCFTOgdIvo
# vYeLKEyADJ0pad+/Zx3hdkNyU4FeuoA0lYxU/+u0HMxXmntqX6r5GYQaemsJXRdd
# SGKi2buGCqmiKMYVi8kCfyrqcfSwf080yddM6jFtGeMjEoJm33K8HYpJYugxc2sn
# I5RETNNRByPmXGoX0zlFhBXzYrGmGrpI7ZCAGxXgB4nMmnk1wpUvW1v/TMNmCVaH
# 1slNMIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsF
# ADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
# ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElE
# IFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYD
# VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln
# aWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29k
# ZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOz
# HH8OEa9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ
# 17aq8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgm
# uyRpwsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKr
# zn/pfMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdO
# tcT3jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9k
# czyen6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAO
# BgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEE
# bTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYB
# BQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3Vy
# ZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0
# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5j
# cmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBz
# Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrE
# uXsqCqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3z
# bcgPMA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTv
# MGHXfgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNL
# rddfRHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6R
# o8AlEeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaK
# JAL+L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aT
# EAb8B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHvMIIGajCCBVKg
# AwIBAgIQAwGaAjr/WLFr1tXq5hfwZjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
# cnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBBc3N1cmVkIElEIENBLTEwHhcNMTQx
# MDIyMDAwMDAwWhcNMjQxMDIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzERMA8GA1UE
# ChMIRGlnaUNlcnQxJTAjBgNVBAMTHERpZ2lDZXJ0IFRpbWVzdGFtcCBSZXNwb25k
# ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjZF38fLPggjXg4PbG
# KuZJdTvMbuBTqZ8fZFnmfGt/a4ydVfiS457VWmNbAklQ2YPOb2bu3cuF6V+l+dSH
# dIhEOxnJ5fWRn8YUOawk6qhLLJGJzF4o9GS2ULf1ErNzlgpno75hn67z/RJ4dQ6m
# WxT9RSOOhkRVfRiGBYxVh3lIRvfKDo2n3k5f4qi2LVkCYYhhchhoubh87ubnNC8x
# d4EwH7s2AY3vJ+P3mvBMMWSN4+v6GYeofs/sjAw2W3rBerh4x8kGLkYQyI3oBGDb
# vHN0+k7Y/qpA8bLOcEaD6dpAoVk62RUJV5lWMJPzyWHM0AjMa+xiQpGsAsDvpPCJ
# EY93AgMBAAGjggM1MIIDMTAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAW
# BgNVHSUBAf8EDDAKBggrBgEFBQcDCDCCAb8GA1UdIASCAbYwggGyMIIBoQYJYIZI
# AYb9bAcBMIIBkjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t
# L0NQUzCCAWQGCCsGAQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAg
# AHQAaABpAHMAIABDAGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0
# AHUAdABlAHMAIABhAGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABE
# AGkAZwBpAEMAZQByAHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABS
# AGUAbAB5AGkAbgBnACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3
# AGgAaQBjAGgAIABsAGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBk
# ACAAYQByAGUAIABpAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBu
# ACAAYgB5ACAAcgBlAGYAZQByAGUAbgBjAGUALjALBglghkgBhv1sAxUwHwYDVR0j
# BBgwFoAUFQASKxOYspkH7R7for5XDStnAs0wHQYDVR0OBBYEFGFaTSS2STKdSip5
# GoNL9B6Jwcp9MH0GA1UdHwR2MHQwOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0
# LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENBLTEuY3JsMDigNqA0hjJodHRwOi8vY3Js
# NC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURDQS0xLmNybDB3BggrBgEF
# BQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBB
# BggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
# QXNzdXJlZElEQ0EtMS5jcnQwDQYJKoZIhvcNAQEFBQADggEBAJ0lfhszTbImgVyb
# hs4jIA+Ah+WI//+x1GosMe06FxlxF82pG7xaFjkAneNshORaQPveBgGMN/qbsZ0k
# fv4gpFetW7easGAm6mlXIV00Lx9xsIOUGQVrNZAQoHuXx/Y/5+IRQaa9YtnwJz04
# HShvOlIJ8OxwYtNiS7Dgc6aSwNOOMdgv420XEwbu5AO2FKvzj0OncZ0h3RTKFV2S
# Qdr5D4HRmXQNJsQOfxu19aDxxncGKBXp2JPlVRbwuwqrHNtcSCdmyKOLChzlldqu
# xC5ZoGHd2vNtomHpigtt7BIYvfdVVEADkitrwlHCCkivsNRu4PQUCjob4489yq9q
# jXvc2EQwggbNMIIFtaADAgECAhAG/fkDlgOt6gAK6z8nu7obMA0GCSqGSIb3DQEB
# BQUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV
# BAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQg
# SUQgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0yMTExMTAwMDAwMDBaMGIxCzAJ
# BgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
# aWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IEFzc3VyZWQgSUQgQ0EtMTCC
# ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOiCLZn5ysJClaWAc0Bw0p5W
# VFypxNJBBo/JM/xNRZFcgZ/tLJz4FlnfnrUkFcKYubR3SdyJxArar8tea+2tsHEx
# 6886QAxGTZPsi3o2CAOrDDT+GEmC/sfHMUiAfB6iD5IOUMnGh+s2P9gww/+m9/ui
# zW9zI/6sVgWQ8DIhFonGcIj5BZd9o8dD3QLoOz3tsUGj7T++25VIxO4es/K8DCuZ
# 0MZdEkKB4YNugnM/JksUkK5ZZgrEjb7SzgaurYRvSISbT0C58Uzyr5j79s5AXVz2
# qPEvr+yJIvJrGGWxwXOt1/HYzx4KdFxCuGh+t9V3CidWfA9ipD8yFGCV/QcEogkC
# AwEAAaOCA3owggN2MA4GA1UdDwEB/wQEAwIBhjA7BgNVHSUENDAyBggrBgEFBQcD
# AQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgwggHSBgNV
# HSAEggHJMIIBxTCCAbQGCmCGSAGG/WwAAQQwggGkMDoGCCsGAQUFBwIBFi5odHRw
# Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYI
# KwYBBQUHAgIwggFWHoIBUgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAg
# AEMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAg
# AGEAYwBjAGUAcAB0AGEAbgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBl
# AHIAdAAgAEMAUAAvAEMAUABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBu
# AGcAIABQAGEAcgB0AHkAIABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAg
# AGwAaQBtAGkAdAAgAGwAaQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAg
# AGkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIABy
# AGUAZgBlAHIAZQBuAGMAZQAuMAsGCWCGSAGG/WwDFTASBgNVHRMBAf8ECDAGAQH/
# AgEAMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln
# aWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j
# b20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MIGBBgNVHR8EejB4MDqgOKA2
# hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290
# Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRB
# c3N1cmVkSURSb290Q0EuY3JsMB0GA1UdDgQWBBQVABIrE5iymQftHt+ivlcNK2cC
# zTAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkqhkiG9w0BAQUF
# AAOCAQEARlA+ybcoJKc4HbZbKa9Sz1LpMUerVlx71Q0LQbPv7HUfdDjyslxhopyV
# w1Dkgrkj0bo6hnKtOHisdV0XFzRyR4WUVtHruzaEd8wkpfMEGVWp5+Pnq2LN+4st
# kMLA0rWUvV5PsQXSDj0aqRRbpoYxYqioM+SbOafE9c4deHaUJXPkKqvPnHZL7V/C
# SxbkS3BMAIke/MV5vEwSV/5f4R68Al2o/vsHOE8Nxl2RuQ9nRc3Wg+3nkg2NsWmM
# T/tZ4CMP0qquAHzunEIOz5HXJ7cW7g/DvXwKoO4sCFWFIrjrGBpN/CohrUkxg0eV
# d3HcsRtLSxwQnHcUwZ1PL1qVCCkQJjGCBDswggQ3AgEBMIGGMHIxCzAJBgNVBAYT
# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy
# dC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNp
# Z25pbmcgQ0ECEAPnUjrTIN+5MdmmF1RZQXcwCQYFKw4DAhoFAKB4MBgGCisGAQQB
# gjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK
# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFN0v9wFp
# bJCzwy6LLymBIXdGvNbIMA0GCSqGSIb3DQEBAQUABIIBAFZTniwEe4DF0yIjWxZC
# hylIQTCgGU/3CZdBLG0oVZdnXQMUtpf5iONBqgMG+8iQr/bubeNdKNi52pnENdXf
# LgM2kudRtUccH0pWlXNV9MqRvrZndVMzp8vYM3F5SzM7DCovMNlSvw8AbDM6ipw+
# Z1ZXnkr7y6c0KSp8/K0ITTzp0gBmWTlF0IzLXtZUseUNd7TWjq7/fobySfmFW69t
# qVcMH4nRBhou9THwm6B21mTCUwdANDMmEXNaSzaReTCl5Gp6MTZHdvCjpJd4q1y/
# PKIR5IJxk/B92hltw08NxtwHe1wtCHeMYYM2Dq1h8nMv6aL/NK3THR8ANEjr9cKQ
# 3eShggIPMIICCwYJKoZIhvcNAQkGMYIB/DCCAfgCAQEwdjBiMQswCQYDVQQGEwJV
# UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
# Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBBc3N1cmVkIElEIENBLTECEAMBmgI6/1ix
# a9bV6uYX8GYwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEw
# HAYJKoZIhvcNAQkFMQ8XDTE4MTIxNTE0MDY1MVowIwYJKoZIhvcNAQkEMRYEFLSe
# FZuW1KB/W0geFEj6TFW0Koa9MA0GCSqGSIb3DQEBAQUABIIBABTwb7K7OirstuJp
# Wayj6hFPTQIaP1Tf8oq3wcohCjeEL8gsrbVui678RlzmhT39+lxmDnTs+qFqbFF4
# Yjfpn9DWZWnNnKO7oyxhuvAjfcyJHw2K5N8MyDvva92baiWawEqCI7O0c/NWGW7w
# rf+4VD8c+dBHEYjT2LQsAlPl3LUIrR56u0C/3BPH1P0i8P9cEyxzuwdryd+vDqw1
# fuokTkzOoSaei4slqPRG6T/vqdHcT2qKVuxdpQoL01RPzF/9wuPjWL3yp+Oq8p6d
# vEz/4w/yyO6qU6Y8hYvFVgGfRkhTspjxG+WPMABGYVjtmzLB06++aEHGkG9wIX7b
# IGEzKiQ=
# SIG # End signature block
@AyrA
Copy link
Author

AyrA commented Dec 15, 2018

As of 2018-12-15 it is signed with a valid certificate.

@bartlbyCv
Copy link

Tell me how to change the folder to which access is provided to the example D:\Pic

@AyrA
Copy link
Author

AyrA commented Aug 19, 2021

Access is provided to whatever folder your powershell currently points. To get access to "D:\Pic", go into that directory with powershell, then call the script

@Lan-Hekary
Copy link

Hello,
Please add this Check to avoid throwing errors about ContentLength
I found that the Property is named ContentLength64 in my Powershell v5.1.19041.2364.

	if ($Context.Response.ContentLength -ne $null) {
		$Context.Response.ContentLength = $Content.Length
	} elseif ($Context.Response.ContentLength64 -ne $null) {
		$Context.Response.ContentLength64 = $Content.Length
	}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment