Powershell Web Server 页面上的两个或多个操作

Powershell Web Server two or more actions on a page

通过使用 GIT Hub URL 中的一些说明和我自己的工作,我创建了一个 Powershell Web 服务器。但现在我停在了如何在一页上的不同变量中存储两个或多个数据。 例如,在这种情况下,我需要为命令 New-AdUser 提供用户名和经理姓名。我将拥有比这两个更多的数据,但我们暂时保留它。

网站目前的样子:

执行此脚本后我收到:

?CreateName=John+Doe&CreateManager=John+Lenon&CreateButton=create

不可能将变量一分为二,两个名称都在同一个变量中,我可以使用 -replace 清除不必要的数据,但正如我所说,我需要将它们分成两个变量 $ 才能它工作正常。

正如您在下面的代码中看到的,我在一个页面上使用了两个 GET 方法来输入不同的变量。

!HEADERLINE
<p>
<h2> This is a Header </h2>
<h3>some text in here</h3>
<pre>!RESULT</pre>
<form method="GET" action="/">
<b>User Name</b></br><input type="text" maxlength=255 size=50 name="CreateName" value=''>
</br><form method="GET" action="/">
<b>Manager Name</b></br><input type="text" maxlength=255 size=50 name="CreateManager" value=''>
</br>
</br><input type="submit" name="CreateButton" value="create" >
</form>
</p>

这是来自 switch GET 的部分代码,目前,它只是向我显示输出,所以请注意这一点。

switch ($RECEIVED)
    {
        "GET /"
        {   # execute command
            # retrieve GET query string
            $CreateUserName = ''
            $CreateUserName = [URI]::UnescapeDataString(($REQUEST.Url.Query))

            $RESULT =  $CreateUserName 2> $NULL | Out-String

但我想要的是收到:

$CreateName = 'John Doe'
$CreateManager = 'John Lenon'

将数据从HTML表格中存入,插入到 New-ADUser -Name $CreateName -Manager $CreateManager

这是我第一次在网络服务器上写脚本,但是我在Powershell中有很多完整的脚本。我希望除了 运行 其他 ps1 脚本之外还有其他选项直接来自 URL

通过访问 .Net Framework class HttpUtility 您可以轻松解析查询字符串。

$query = '?CreateName=John+Doe&CreateManager=John+Lenon&CreateButton=create'
$queryString = [System.Web.HttpUtility]::ParseQueryString($query)
$createName = $queryString['CreateName']
Write-Host $createName

显示器

John Doe

不确定是否有更多 Powershell 风格的解决方案,但这应该可行。另请查看 $queryString.AllKeys。在循环中处理多个字段可能很有用。

此外,如果您收到完整的 url,您可以执行以下操作:$uri = New-Object System.Uri 'http://example.com?CreateName=John+Doe,然后检索 url $uri.Query 的查询部分。因此,要获取查询字符串对象,它是:$queryString = [System.Web.HttpUtility]::ParseQueryString($uri.Query)