เรียกใช้เว็บเซิร์ฟเวอร์ HTTP อย่างง่ายโดยใช้ PowerShell
เพื่อจุดประสงค์ในการทดสอบหรือเป็นโครงง่ายๆ ในขั้นตอนการปรับใช้บริการ ฉันจำเป็นต้องเรียกใช้เว็บเซิร์ฟเวอร์อย่างง่ายบน Windows เป็นประจำ หากต้องการหลีกเลี่ยงการติดตั้ง IIS ที่มีคุณสมบัติครบถ้วน คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ HTTP อย่างง่ายได้โดยตรงจากคอนโซล PowerShell ของคุณ คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ดังกล่าวบนพอร์ต TCP ใดก็ได้โดยใช้คลาส System.Net.HttpListener .NET ในตัว
เปิดคอนโซล PowerShell ของคุณและสร้างตัวฟัง HTTP:
$httpListener = New-Object System.Net.HttpListenerจากนั้นระบุพอร์ตที่จะฟัง ในตัวอย่างนี้ ฉันต้องการเรียกใช้เว็บเซิร์ฟเวอร์ HTTP บนพอร์ต 9090
$httpListener.Prefixes.Add("http://localhost:9090/")ตรวจสอบให้แน่ใจว่าพอร์ตนี้ไม่ได้ถูกใช้โดยกระบวนการอื่น คุณสามารถดูได้ว่ากระบวนการใดกำลังฟัง TCP หรือ UDP บน Windows
หากต้องการฟังในอินเทอร์เฟซเครือข่ายทั้งหมด ให้ใช้
http://+:9090/ที่อยู่.
เริ่มฟัง:
$httpListener.Start()คุณสามารถใช้การรับรองความถูกต้องประเภทต่างๆ (Basic, Digest, Windows, Negotiate หรือ NTLM) ในวัตถุ HttpListener หรือผูกใบรับรอง SSL เพื่อใช้ HTTPS
หากคุณเรียกใช้รหัสนี้ กระบวนการแยกต่างหากที่รอการเชื่อมต่อบนพอร์ต 9090 จะปรากฏใน Windows ตรวจสอบโดยใช้คำสั่ง:
nestat -na 9090หรือแสดงรายการพอร์ตที่เปิดอยู่โดยใช้ PowerShell:
Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, State | Sort-Object LocalPort |ftอย่าลืมเปิดพอร์ตนี้ใน Windows Defender Firewall คุณสามารถสร้างกฎเพื่อเปิดพอร์ตไฟร์วอลล์ได้อย่างรวดเร็วโดยใช้คำสั่ง PowerShell:
New-NetFirewallRule -DisplayName "AllowTestWebServer" -Direction Inbound -Protocol TCP -LocalPort 9090 -Action Allowตอนนี้สร้างไฟล์ข้อความบนฮาร์ดไดรฟ์ของคุณด้วย HTML ที่คุณต้องการให้เว็บเซิร์ฟเวอร์ของคุณแสดง ตัวอย่างเช่น:
<!DOCTYPE html>
<html>
<head>
<title>
Lightweight PowerShell Web Server</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {background-color:#ffffff;background-repeat:no-repeat;background-position:top left;background-attachment:fixed;}
h1{font-family:Arial, sans-serif;color:#000000;background-color:#ffffff;}
p {font-family:Georgia, serif;font-size:14px;font-style:normal;font-weight:normal;color:#000000;background-color:#ffffff;}
</style>
</head>
<body>
<h1>Test web page </h1>
<p>This web page was generated by PowerShell using the System.Net.HttpListener class</p>
</body>
</html>
ฉันบันทึกโค้ด HTML นี้ไว้ที่ C:\PS estwebpage.html ด้วยการเข้ารหัส UTM-8
จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่ออ่านไฟล์ HTML และส่งการตอบกลับไปยังเบราว์เซอร์ของผู้ใช้
$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType = 'text/HTML'
$WebContent = Get-Content -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()เปิดที่อยู่ URL ของเซิร์ฟเวอร์ HTTP ของคุณในเบราว์เซอร์ (
http://localhost:9090) หรือใช้ PowerShell เพื่อรับเนื้อหาของหน้าเว็บ สคริปต์ส่งคืนรหัส HTML เพียงครั้งเดียว หลังจากนั้นระบบจะหยุดฟังของคุณโดยอัตโนมัติ (ประมวลผลคำขอของผู้ใช้เพียงรายเดียว)
ฟรีพอร์ต TCP:
$httpListener.Close()หากคุณต้องการให้เซิร์ฟเวอร์ HTTP ส่งคืนหน้าของคุณต่อไป คุณต้องเพิ่มโค้ด PowerShell ลงในลูป ตัวอย่างต่อไปนี้เริ่มต้นเซิร์ฟเวอร์ HTTP ในลูปที่สิ้นสุดเมื่อมีการกดคีย์ใดๆ ในคอนโซล PowerShell
write-host "Press any key to stop the HTTP listener after next request"
while (!([console]::KeyAvailable)) {
$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType = 'text/HTML'
$WebContent = Get-Content -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()
Write-Output "" # Newline
}
$httpListener.Close()เซิร์ฟเวอร์ PowerShell HTTP จะยังคงอยู่จนกว่าคุณจะปิดคอนโซล PowerShell หรือสิ้นสุดเซสชันโดยใช้
.Closeวิธี.
คุณสามารถเรียกใช้สคริปต์ PowerShell นี้เป็นบริการของ Windows
คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ขนาดเล็กบนโฮสต์ Windows ใดก็ได้โดยไม่ต้องใช้บริการข้อมูลทางอินเทอร์เน็ตหรือการติดตั้งซอฟต์แวร์ของบริษัทอื่น ไม่จำเป็นต้องมีสิทธิ์ของผู้ดูแลระบบ คุณสามารถใช้ HTTPListener นี้เป็นเซิร์ฟเวอร์ REST อย่างง่าย หรือเพื่อรับข้อมูลจากคอมพิวเตอร์ระยะไกลผ่าน HTTP


