You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建含方括号属性的PowerShell哈希表?

问题:PowerShell哈希表键含方括号报错,无法提交内网登录请求

我爬取公司内网网站时遇到问题:用户名和密码字段的name属性包含方括号(user[name]、user[password])。

尝试的代码

$Creds = Get-Credential -Message "input e-mail and password"

$LoginUri = "公司内网地址,不便公开"
$LoginPage = Invoke-WebRequest -Uri $LoginUri -SessionVariable "TempSession"
$Auth_Token = $LoginPage.InputFields | Where-Object {$_.name -eq "Auth_Token"} | Select-Object -ExpandProperty Value

$AuthBody = @{
    user[name]      = $Creds.UserName
    user[password]  = $Creds.Password
    Auth_Token      = $AuthToken
    Submit          = "Login"
}

$LogonMethod = Invoke-WebRequest -Uri $LoginUri -Body $AuthBody -WebSession $TempSession -Method Post

报错信息

PS C:\Users\diego> $AuthBody = @{
>>    user[name]    = $Creds.UserName
>>    user[password]    = $Creds.Password
>>    Auth_Token    = $AuthToken
>>    Submit        = "Login"
>> }
ParserError: 
Line |
   2 |      user[name]        = $Creds.UserName
     |          ~
     | Missing '=' operator after key in hash literal.

对应HTML元素

<input autocomplete="off" autocorrect="off" autocapitalize="off" class="string text required" required="required" aria-required="true" placeholder="Usuário" type="text" value="" name="user[name]" id="user_name">

<input autocomplete="off" autocorrect="off" autocapitalize="off" class="password required" required="required" aria-required="true" placeholder="Senha" type="password" name="user[password]" id="user_password">

我之前用Selenium导出的Python代码里用元素ID作为键可行,但不熟悉Python,想尽量用PowerShell解决。请问怎么构建含方括号键的PowerShell哈希表?能不能通过ID调用输入字段?


解决方案

1. 正确构建含特殊字符的哈希表键

PowerShell中,当哈希表的键包含方括号这类特殊字符时,必须用引号(单引号或双引号)把键包裹起来,避免解析错误:

$AuthBody = @{
    'user[name]'      = $Creds.UserName
    'user[password]'  = $Creds.GetNetworkCredential().Password
    'Auth_Token'      = $Auth_Token
    'Submit'          = "Login"
}

注意:$Creds.Password返回的是SecureString加密类型,需要用$Creds.GetNetworkCredential().Password转换为明文字符串,才能被表单正确接收。

2. 关于通过ID调用输入字段的问题

Invoke-WebRequest提交表单数据时,是基于HTML元素的name属性而非id属性识别参数的。网站后端只会读取name属性对应的值,所以即使元素有id,也不能直接用id作为哈希表的键来提交请求,必须使用name属性的值。


内容的提问来源于stack exchange,提问作者dkabal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:33:10