2021-12-15 powershell 簡單web程序

function Get-DirectoryContent {

<#

? ? .SYNOPSIS

? ? ? ? Function to get directory content

? ? .EXAMPLE

? ? ? ? Get-DirectoryContent -Path "C:\" -HeaderName "poshserver.net" -RequestURL "http://poshserver.net" -SubfolderName "/"

#>

[CmdletBinding(SupportsShouldProcess = $true)]

param (

? ? [Parameter(

? ? ? ? Mandatory = $true,

? ? ? ? HelpMessage = 'Directory Path')]

? ? [string]$Path,

? ? [Parameter(

? ? ? ? Mandatory = $false,

? ? ? ? HelpMessage = 'Header Name')]

? ? [string]$HeaderName,

? ? [Parameter(

? ? ? ? Mandatory = $false,

? ? ? ? HelpMessage = 'Request URL')]

? ? [string]$RequestURL,

? ? [Parameter(

? ? ? ? Mandatory = $false,

? ? ? ? HelpMessage = 'Subfolder Name')]

? ? [string]$SubfolderName,

? ? [string]$Root

)

@"

<html>

<head>

<title>$($HeaderName)</title>

</head>

<body>

<h1>$($HeaderName) - $($SubfolderName)</h1>

<hr>

"@

@"

<a href="./../">[To Parent Directory]</a><br><br>

<table cellpadding="5">

"@

$Files = (Get-ChildItem "$Path")

foreach ($File in $Files)

{

$FileURL = ($File.FullName -replace [regex]::Escape($Root), "" ) -replace "\\","/"

if (!$File.Length) { $FileLength = "[dir]" } else { $FileLength = $File.Length }

@"

<tr>

<td align="right">$($File.LastWriteTime)</td>

<td align="right">$($FileLength)</td>

<td align="left"><a href="$($FileURL)">$($File.Name)</a></td>

</tr>

"@

}

@"

</table>

<hr>

</body>

</html>

"@

}

[System.Reflection.Assembly]::LoadWithPartialName("System.Web")

$listener = New-Object System.Net.HttpListener

$listener.Prefixes.Add("http://localhost:8080/")

$listener.AuthenticationSchemes = [System.Net.AuthenticationSchemes]::IntegratedWindowsAuthentication

$listener.Start()

New-PSDrive -Name FileServe -PSProvider FileSystem -Root $PWD.Path

$Root = $PWD.Path

cd FileServe:\

do {

? ? $context = $listener.GetContext()

? ? $requestUrl = $context.Request.Url

? ? $response = $context.Response

? ? $context.User.Identity.Impersonate()

? ? Write-Host "> $requestUrl"

? ? $Content = ""

? ? $localPath = $requestUrl.LocalPath

? ? try{

? ? ? ? $RequestedItem = Get-Item -LiteralPath "FileServe:\$localPath" -Force -ErrorAction Stop

? ? ? ? $FullPath = $RequestedItem.FullName

? ? ? ? if($RequestedItem.Attributes -match "Directory") {

? ? ? ? ? ? $Content = Get-DirectoryContent -Path $FullPath -HeaderName "PowerShell FileServer" -RequestURL "http://localhost:8080" -SubfolderName $localPath -Root $Root

? ? ? ? ? ? $Encoding = [system.Text.Encoding]::UTF8

? ? ? ? ? ? $Content = $Encoding.GetBytes($Content)

? ? ? ? ? ? $response.ContentType = "text/html"

? ? ? ? } else {

? ? ? ? ? ? $Content = [System.IO.File]::ReadAllBytes($FullPath)

? ? ? ? ? ? $response.ContentType = [System.Web.MimeMapping]::GetMimeMapping($FullPath)

? ? ? ? }

? ? } catch [System.UnauthorizedAccessException] {

? ? ? ? Write-Host "Access Denied"

? ? ? ? Write-Host "Current user:? $([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)"

? ? ? ? Write-Host "Requested File: FileServe:\$localPath"

? ? ? ? $response.StatusCode = 404

? ? ? ? $Content = [System.Text.Encoding]::UTF8.GetBytes("<h1>404 - Page not found</h1>")

? ? } catch [System.Management.Automation.ItemNotFoundException] {

? ? ? ? Write-Host "No route found for:? FileServe:\$localPath"

? ? ? ? $response.StatusCode = 404

? ? ? ? $Content = [System.Text.Encoding]::UTF8.GetBytes("<h1>404 - Page not found</h1>")

? ? } catch {

? ? ? ? $_

? ? ? ? $Content =? "$($_.InvocationInfo.MyCommand.Name) : $($_.Exception.Message)"

? ? ? ? $Content +=? "$($_.InvocationInfo.PositionMessage)"

? ? ? ? $Content +=? "? ? + $($_.CategoryInfo.GetMessage())"

? ? ? ? $Content +=? "? ? + $($_.FullyQualifiedErrorId)"

? ? ? ? $Content = [System.Text.Encoding]::UTF8.GetBytes($Content)

? ? ? ? $response.StatusCode = 500

? ? }

? ? $response.ContentLength64 = $Content.Length

? ? $response.OutputStream.Write($Content, 0, $Content.Length)

? ? $response.Close()

? ? $responseStatus = $response.StatusCode

? ? Write-Host "< $responseStatus"

} while ($listener.IsListening)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚎研,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子支示,更是在濱河造成了極大的恐慌查邢,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件我擂,死亡現(xiàn)場(chǎng)離奇詭異衬以,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)校摩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門看峻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衙吩,你說我怎么就攤上這事互妓。” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵冯勉,是天一觀的道長澈蚌。 經(jīng)常有香客問我,道長灼狰,這世上最難降的妖魔是什么宛瞄? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮交胚,結(jié)果婚禮上份汗,老公的妹妹穿的比我還像新娘。我一直安慰自己蝴簇,他們只是感情好杯活,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熬词,像睡著了一般轩猩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荡澎,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天均践,我揣著相機(jī)與錄音,去河邊找鬼摩幔。 笑死彤委,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的或衡。 我是一名探鬼主播焦影,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼封断!你這毒婦竟也來了斯辰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤坡疼,失蹤者是張志新(化名)和其女友劉穎彬呻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柄瑰,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闸氮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了教沾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒲跨。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖授翻,靈堂內(nèi)的尸體忽然破棺而出或悲,到底是詐尸還是另有隱情孙咪,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布巡语,位于F島的核電站翎蹈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捌臊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一兜材、第九天 我趴在偏房一處隱蔽的房頂上張望理澎。 院中可真熱鬧,春花似錦曙寡、人聲如沸糠爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽执隧。三九已至,卻和暖如春户侥,著一層夾襖步出監(jiān)牢的瞬間镀琉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蕊唐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屋摔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓替梨,卻偏偏與公主長得像钓试,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子副瀑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測(cè)試 ...
    KeKeMars閱讀 6,338評(píng)論 0 6
  • ---------------------------------------- 核心屬性 -----------...
    A言逍閱讀 1,433評(píng)論 0 0
  • 英文文檔弓熏,一開始我也是抗拒的,邊翻譯邊看糠睡,也就花費(fèi)了1個(gè)小時(shí)基本就閱讀過了挽鞠,我的英文基礎(chǔ)其實(shí)很差。附上鏈接:鏈接:...
    lonecolonel閱讀 9,909評(píng)論 3 1
  • 內(nèi)容來自《Node.js開發(fā)指南》 核心模塊是 Node.js 的心臟狈孔,它由一些精簡而高效的庫組成滞谢,為 Node....
    angelwgh閱讀 898評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)除抛,斷路器狮杨,智...
    卡卡羅2017閱讀 134,664評(píng)論 18 139