PowerShell脚本求助:实现按字母顺序向API发送文件并配置间隔休眠
修正你的PowerShell脚本问题
让我帮你梳理下当前脚本里的问题,然后给出完全贴合你需求的修正版本:
先说说现有脚本里的几个核心问题
- 语法与变量引用错误:你的
Invoke-RestMethod参数写法有问题,$LocalFile是FileInfo对象,直接放进双引号里会输出对象名称而非完整文件路径,得用$LocalFile.FullName;另外参数顺序、引号包裹也有错误,脚本块里的分号位置也不对。 - 休眠逻辑顺序颠倒:你现在是先判断计数是否为偶数就休眠,再处理文件——这会导致第2个文件还没发送就先休眠了,完全不符合“每发送2个文件后休眠”的需求。
- 未过滤文件类型:
Get-ChildItem默认会把文件夹也包含进来,得加-File参数只处理文件。 - 脚本块未执行:你定义了
$command但没实际运行,等于发送请求的代码根本没生效。 - 排序可选调整:你用了
Sort-Object -Descending是按字母倒序排列,如果需求是正序,去掉这个参数就行。
修正后的完整脚本
$url = "https://anywebserver" $localfolder = "c:\folder" # 切换到目标文件夹(其实用FullName的话可以省略这一步) Set-Location $localfolder # 获取文件夹下所有文件,按字母正序排列(要倒序就加 -Descending) $localfiles = Get-ChildItem -Path $localfolder -File | Sort-Object Name $count = 0 foreach ($LocalFile in $localfiles) { $count++ Write-Host "正在处理文件:$($LocalFile.Name),第$count个文件" # 每个文件重复发送100次请求 for ($i = 1; $i -le 100; $i++) { try { # 发送POST请求,用FullName传递正确的文件路径 $result = Invoke-RestMethod -Method Post -Uri $url -InFile $LocalFile.FullName Write-Host " $($LocalFile.Name) 第$i次发送成功" } catch { # 捕获异常,避免单个请求失败导致整个脚本中断 Write-Warning " $($LocalFile.Name) 第$i次发送失败:$_" } } # 每发送完2个文件后休眠10秒 if ($count % 2 -eq 0) { Write-Host "已完成$count个文件的发送任务,休眠10秒..." Start-Sleep -Seconds 10 } }
关键修正点说明
- 文件路径处理:用
$LocalFile.FullName确保API能拿到正确的文件路径,避免因路径错误导致请求失败。 - 休眠逻辑调整:先处理完文件,再判断计数是否为偶数,这样就能实现“发完2个文件后休眠”的需求。
- 异常处理:添加
try/catch块,单个请求失败不会中断整个脚本,还能看到失败原因。 - 进度可视化:用
Write-Host输出实时进度,比你之前用$command查看进度更直观。 - 文件过滤:
-File参数确保只处理文件,不会把文件夹当成文件发送。
内容的提问来源于stack exchange,提问作者Tylendis
相关产品推荐
相关产品推荐

