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

将含wget的Bash脚本转换为PowerShell脚本:需登录的文件下载

将Bash登录下载脚本转换为PowerShell版本

1. 登录并获取认证会话(含Cookie)及页面内容

对应原Bash脚本的登录步骤,PowerShell用Invoke-WebRequest处理表单提交,通过会话变量自动维护Cookie,同时保存返回的页面内容到临时文件:

# 定义临时文件路径,调用Windows系统临时目录
$sessionOutputPath = Join-Path $env:TEMP "session.output"
$loginUrl = "https://website.com/session"

# 提交登录表单,会话Cookie自动存入$webSession,页面内容输出到临时文件
Invoke-WebRequest -Uri $loginUrl -Method Post -Body @{login = "myusername"} -SessionVariable webSession -OutFile $sessionOutputPath
  • 用-SessionVariable webSession替代wget的Cookie保存参数,PowerShell会自动管理会话中的Cookie,后续请求直接复用即可。
  • -Body @{login = "myusername"}对应原脚本的--post-data,PowerShell会自动处理表单编码。

2. 解析下载链接并携带Cookie下载文件

对应原脚本的下载和链接解析步骤,复用会话Cookie请求目标站点,同时用正则提取页面中的PDF链接:

# 生成带日期的文件名,示例为用户目录下的文件(可按需修改路径)
$downloadPath = Join-Path $HOME "filename$(Get-Date -Format 'yyyy-MM-dd').pdf"
$targetUrl = "https://website.com"

# 携带会话Cookie下载文件
Invoke-WebRequest -Uri $targetUrl -WebSession $webSession -OutFile $downloadPath

# 从临时文件中解析PDF链接,对应原脚本的grep命令
Select-String -Path $sessionOutputPath -Pattern '/my-subscriptions/nnn/([^"#]+)pdf' | ForEach-Object { $_.Matches.Value }
  • Get-Date -Format 'yyyy-MM-dd'替代Bash的date "+%Y-%m-%d",生成相同格式的日期字符串。
  • Select-String替代grep -o -E,通过正则匹配提取目标链接,ForEach-Object输出匹配结果。

3. 清理临时文件

对应原脚本的清理步骤,用PowerShell命令删除临时文件:

# 删除临时会话输出文件
Remove-Item $sessionOutputPath -Force
  • 会话Cookie已通过$webSession变量维护,无需单独保存Cookie文件,仅需删除会话输出文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:25:19