Powershell 如何获取参数?

Powershell 如何获取参数?,powershell,http,Powershell,Http,我成功地在我的计算机上打开了一个端口(仅使用PowerShell),并知道何时对该端口执行HTTP请求。我想出了一个简单的代码: $listener = [System.Net.Sockets.TcpListener]5566; $listener.Start(); while ($true) { $client = $Listener.AcceptTcpClient(); Write-Host "Connected!"; $client.Close(); } 如果

我成功地在我的计算机上打开了一个端口(仅使用PowerShell),并知道何时对该端口执行HTTP请求。我想出了一个简单的代码:

$listener = [System.Net.Sockets.TcpListener]5566;
$listener.Start();

while ($true) {
    $client = $Listener.AcceptTcpClient();
    Write-Host "Connected!";

    $client.Close();
}
如果我打开浏览器并键入
http://localhost:5566
在PowerShell界面中,它将显示一条消息,说明用户已连接

我需要做的是获取这个HTTP请求的get参数。例如,如果我打开浏览器并键入
http://localhost:5566/test.html?parameter1=xxx¶meter2=yyy


如何使用上面的简化代码获取GET参数(parameter1和parameter2)名称和值?

如果您愿意使用HttpListener而不是TcpListener。做这项工作比较容易

下面的脚本将在浏览器中输出

Path is /test.html
parameter2 is equal to yyy
parameter1 is equal to xxx
又快又脏的脚本

$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:5566/")


try {
    $listener.Start();
    while ($true) {   
        $context = $listener.GetContext()
        $request = $context.Request

        # Output the request to host
        Write-Host $request | fl * | Out-String

        # Parse Parameters from url
        $rawUrl = $request.RawUrl

        $Parameters = @{}
        $rawUrl = $rawUrl.Split("?")
        $Path = $rawUrl[0]
        $rawParameters = $rawUrl[1]
        if ($rawParameters) {
            $rawParameters = $rawParameters.Split("&")


            foreach ($rawParameter in $rawParameters) {
                $Parameter = $rawParameter.Split("=")

                $Parameters.Add($Parameter[0], $Parameter[1])
            }
        }

        # Create output string (dirty html)
        $output = "<html><body><p>"
        $output = $output + "Path is $Path" + "<br />"
        foreach ($Parameter in $Parameters.GetEnumerator()) {
            $output = $output + "$($Parameter.Name) is equal to $($Parameter.Value)" + "<br />"
        }

        $output = $output + "</p></body></html>"
        # Send response
        $statusCode = 200
        $response = $context.Response
        $response.StatusCode = $statusCode    
        $buffer = [System.Text.Encoding]::UTF8.GetBytes($output)
        $response.ContentLength64 = $buffer.Length
        $output = $response.OutputStream
        $output.Write($buffer,0,$buffer.Length)
        $output.Close()
    }
} finally {
    $listener.Stop()
}
$listener=New Object System.Net.HttpListener
$listener.Prefixes.Add(“http://localhost:5566/")
试一试{
$listener.Start();
而($true){
$context=$listener.GetContext()
$request=$context.request
#将请求输出到主机
写入主机$request | fl*| Out字符串
#从url解析参数
$rawUrl=$request.rawUrl
$Parameters=@{}
$rawUrl=$rawUrl.Split(“?”)
$Path=$rawUrl[0]
$rawParameters=$rawUrl[1]
如果($rawParameters){
$rawParameters=$rawParameters.Split(&)
foreach($rawParameters中的$rawParameters){
$Parameter=$rawParameter.Split(“”)
$Parameters.Add($Parameter[0],$Parameter[1])
}
}
#创建输出字符串(脏html)
$output=“”
$output=$output+“路径是$Path”+”
” foreach($Parameters.GetEnumerator()中的参数){ $output=$output+“$($Parameter.Name)等于$($Parameter.Value)“+”
} $output=$output+“

” #发送响应 $statusCode=200 $response=$context.response $response.StatusCode=$StatusCode $buffer=[System.Text.Encoding]::UTF8.GetBytes($output) $response.ContentLength64=$buffer.Length $output=$response.OutputStream $output.Write($buffer,0,$buffer.Length) $output.Close() } }最后{ $listener.Stop() }
干杯
Glenn

您收到的第一行是
GET/test.html?parameter1=xxx¶meter2=yyy HTTP/1.0
,这样您就可以从字符串中解析参数,并获得示例代码。将C#代码翻译成PowerShell是件小事。它没用,我的朋友,我把你给我的代码保存在test.ps1文件中,然后执行它。然后我打开浏览器,访问localhost:5566,什么也没发生。打在头上,是的,我没有检查没有参数。。。我相应地改变了它。