将含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
相关产品推荐
相关产品推荐

