在 PowerShell v3 中运行并行 Invoke-WebRequest 作业

2024-01-27

在 PowerShell 中运行同步后台作业非常简单,但我似乎无法让它与新的(v3 中)cmdlet Invoke-WebRequest 一起使用。

我正在通过 PowerShell 以脚本方式下载数千个文件。效果很好,但串联起来需要几天时间:

for($f=0;$f -lt $urlList.Count;$f++)
{
    $remote = $urlList[$f] + $fileList[$f]
    $local = 'C:\folder\' + $fileList[$f]
    Invoke-WebRequest $remote -Method Get -OutFile $local -UserAgent FireFox
}

我已经多次尝试利用“AsJob”方法,但要么出错,要么完成正常,但没有保存本地文件。这是后者的一个例子:

for($f=0;$f -lt $urlList.Count;$f++)
{
    $remote = $urlList[$f] + $fileList[$f]
    $local = 'C:\folder\' + $fileList[$f]
    $command = "Invoke-WebRequest $remote -Method Get -OutFile $local -UserAgent FireFox"
    Start-Job {Invoke-Expression -Command $command}
}
Get-Job|Wait-Job

输出示例:

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
339    Job339          BackgroundJob   Running       True            localhost            Invoke-Expression -Com...
341    Job341          BackgroundJob   Running       True            localhost            Invoke-Expression -Com...
343    Job343          BackgroundJob   Running       True            localhost            Invoke-Expression -Com...
339    Job355          BackgroundJob   Completed     True            localhost            Invoke-Expression -Com...
341    Job357          BackgroundJob   Completed     True            localhost            Invoke-Expression -Com...
343    Job359          BackgroundJob   Completed     True            localhost            Invoke-Expression -Com...

奇怪的是,上面的作业完成的速度大致与下载相关文件所需的速度一样......所以看起来数据正在某个地方 - 只是不是到我的保存位置。我认为它会被存入内存,但不会被保存而被转储。尝试添加和删除“PassThru”选项,但无论哪种方式都得到相同的结果。还尝试将其通过管道传输到 Out-File,但仍然没有乐趣。不知道为什么这个特定的 cmdlet 如此糟糕。


您需要以它们实际进入作业的方式传递参数。在 V3 中,您可以使用 $using: 语法来执行此操作:

for($f=0;$f -lt $urlList.Count;$f++)
{
    $remote = $urlList[$f] + $fileList[$f]
    $local = 'C:\folder\' + $fileList[$f]
    Start-Job {Invoke-WebRequest $using:remote -Method Get -OutFile $using:local -UserAgent FireFox}
}
Get-Job|Wait-Job

顺便说一句,您不需要使用 Invoke-Expression。只需将要在作业中运行的代码放入脚本块(即一组花括号)中{...}.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PowerShell v3 中运行并行 Invoke-WebRequest 作业 的相关文章

  • 在 Array Powershell 中获取新的附加值

    for Get All Files from the Folder FolderItems Get PnPFolderItem FolderSiteRelativeUrl FolderURL ItemType File Write Host
  • Powershell:启动进程不将参数传递给 cmd.exe

    这些是在 powershell 控制台 Windows 10 中运行的命令 username Username password Password securePassword ConvertTo SecureString password
  • 自动递增 EC2 实例名称

    我在 Stackoverflow 上看到很多问题 询问是否有办法自动递增实例名称 例如 foo1 foo2 fooN 我想看看是否有办法在 Powershell 中执行此操作 我正在使用 AutoLaunchConfiguration AS
  • PowerShell 中的“nohup”相当于什么?

    如何模拟 unix 命令的行为nohup在 PowerShell 中 那是nohup my other nonblocking command 我注意到Start Job命令 但是语法对我来说有点不清楚 gt Start Job my ex
  • Azure 函数核心工具安装卡在 Visual Studio Code 中

    我创建了 Azure 函数应用程序来执行 powershell 脚本 想先在我的本地运行它来测试它 当我运行它时 无论有没有调试选项 都会出现一个弹出窗口 其中显示 您必须安装 Azure Functions 核心工具才能调试本地函数 当我
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • Powershell SQL Server数据库连接和连接超时问题

    我有一个连接到 SQL Server 2012 数据库的 powershell 脚本 该脚本运行 SQL 查询并将结果集放入数据表中 以将格式化的电子邮件发送给相关方 下面是问题所在的代码片段 CBA New Object System D
  • Powershell Invoke-Command 远程手动工作,但不能通过 Jenkins

    我遇到了一个非常奇怪的情况 即从 Windows Server 2012 R2 手动运行相同的命令时可以工作 但从同一服务器上运行的 Jenkins 从属进程无法工作 首先 手动运行的输出 管理 PowerShell 窗口 PS C Use
  • Powershell tail 多个文件命令

    我可以通过以下命令尾随一个文件 Get Content Path C log1 txt Tail 10 Wait 如何将其扩展到多个文件 我尝试了以下方法但没有成功 Get Content Path C log1 txt C log2 tx
  • 为什么此 PowerShell 脚本无法正确执行此外部命令?

    以下代码将输出我希望运行的命令字符串 string SourceRepo C inetpub wwwroot Spyda string Repo C inetpub wwwroot BranchClone string revstring
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • 使用 UTF-8 编码的 Powershell 字符串变量

    我检查了许多与此相关的问题 但找不到解决我的问题的东西 基本上 我想将 UTF 8 编码的字符串存储在变量中 然后使用该字符串作为文件名 例如 我正在尝试下载 YouTube 视频 如果我们打印视频标题 则会显示非英文字符 ytd这是you
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不
  • Magento补丁安装失败

    从以下位置下载并运行 Magento PHP 5 4 支持补丁 Magento CE v1 7 0 0 1 7 0 2 时http www magentocommerce com download http www magentocomme
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 如何从 -WhatIf 处理中排除块?

    我正在编写一个 Powershell cmdlet 它需要执行命令并将其 stderr 输出存储到临时文件中以供以后处理 此输出列出了 cmdlet 稍后可能使用的 COM 端口 mostly side effect free inform
  • 远程计算机上的活动登录用户

    我正在使用下面的脚本来获取远程计算机上的登录用户 它工作正常 但我需要让用户处于 活动 状态 如何获取远程计算机上的活动登录用户 function Global Get LoggedOnUser Requires Version 2 0 C
  • 将 Powershell 输出转换为 Markdown 文件

    我有以下代码 xmlFile C Users kraer Desktop bom xml xml xml Get Content xmlFile xml bom components component ForEach Object fin
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • netsh 结果到 PowerShell 对象

    我正在尝试与NETSH https ss64 com nt netsh html来自 PowerShell 我想看到这个命令的结果 例如一个对象 但是netsh返回一个字符串 netsh wlan show hostednetwork Ge

随机推荐

  • 推送到生产服务器时 ASP.NET MVC 错误 500

    我正在 C 项目中开发 ASP NET MVC 4 该项目在我的本地开发服务器上运行良好 但是 当我将其推送到生产服务器时 特定页面会出现 500 内部服务器错误 但是 我收到的错误并不比 处理您的请求时发生错误 更有帮助 如何强制 ASP
  • 如何在 PHP 中使用正则表达式解析 Apache 日志

    我正在尝试在 PHP 中分割这个字符串 11 11 11 11 25 Jan 2000 14 00 01 0100 GET 1986 js HTTP 1 1 200 932 http domain com index html Mozill
  • Xml - 使用Python按标签查找元素[重复]

    这个问题在这里已经有答案了 我正在尝试从一堆 xml 文件中提取一些数据 现在的问题是所有文件的结构并不完全相同 因此 仅迭代子文件并提取值是很困难的 有没有getElementByTag python 处理此类 xml 文档的方法 我发现
  • MATLAB 中的统计异常值检测

    假设我们有这个矩阵 main 10000 5 3 1 5 5677 0 134 1 1 456 3 该方法是计量经济学和统计问题中使用最广泛的方法 X是我们正在寻找异常值的数据 X mean X gt n std X 因此 如果这个不等式成
  • 仅在启动时无法找到运行时版本?

    我有一个非常简单的控制台应用程序 只是一个Console Write 来测试一些启动功能 我将其放在 Window 7 的启动文件夹中 但当它运行时 我收到 无法找到运行此应用程序的运行时版本 奇怪的是 如果我进入启动文件夹并实际运行该程序
  • 如何在keras批量更新期间缩放梯度?

    我正在使用标准 keras 模型 并且正在批量训练 使用train on batch功能 现在 我想获取批次中每个元素的梯度并对其进行缩放 将每个样本梯度与我拥有的样本特定值相乘 并且在缩放每个梯度后 可以将其求和并用于更新现有权重 无论如
  • HTML 输入 type="password" 的 Windows 批处理等效项是什么?

    我需要在 Windows 脚本中从用户那里获取身份验证凭据 但采用经典的 第一个 Google 结果 方法 SET P USR Username SET P PWD Password 不太令人满意 所以我想知道是否有一个 等价物 HTML
  • 帮我解决我的 JavaScript 测验 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经参加这个测验很多年了 只是无法
  • 从 std::vector 中连续擦除的安全方法?

    我认为下面的代码可以工作 但是当目标小部件位于向量末尾时它会崩溃 for std vector
  • 试图推迟我的部分计划

    我试图拍摄我打开的网页的快照 但我需要延迟代码的第二部分 以便程序有时间打开页面 这是代码 import os import sys import time import Image import ImageGrab import webb
  • MSBuild - 它可以计算出解决方案文件中的项目依赖关系吗?如果是这样怎么办?

    我有一个 msbuild 项目 它从 Visual Studio 构建一个 SLN 文件 其中包含所有项目 大约 70 多个项目 并且许多项目相互依赖 这意味着它们需要按顺序构建 有时开发人员会忘记在解决方案文件中的 Visual Stud
  • javascript 中函数声明后的冒号[重复]

    这个问题在这里已经有答案了 我正在查看 Vue js 的源代码 在几乎所有的函数声明中 我找到了一种定义函数的新方法 function isStringStart chr number boolean return chr 0x22 chr
  • 如何在leiningen项目中打包资源

    在示例项目中 https github com technomancy leiningen blob master sample project clj https github com technomancy leiningen blob
  • Anaconda提示加载错误:输入行太长

    我在 Windows 7 64 位版本上安装了 Anaconda 64 python 2 7 安装后 anaconda提示符可以正常启动 但是每当我重新启动 关闭并重新启动笔记本电脑时 anaconda提示符都会显示以下错误消息 并且某些p
  • 自动镜像 GitHub 存储库

    我怀疑这个问题以前曾被问过 尽管我能找到的都是相似但不同的问题 或者是相同的问题 但只有不适合我的解决方案 GitHub 上有一个我无法控制但想要镜像的存储库 对于镜像 我的意思是拥有一个自动更新的克隆 我希望这个镜像也能出现在 GitHu
  • 当使用 PHP 选择值“other”时,如何显示 HTML 输入字段

    我想弄清楚的是如何拥有一个 htmlinput当值为other从下拉菜单中选择 现在 下拉列表的值来自 MySQL DB 查询的结果 该查询有效 但我似乎无法弄清楚当我选择其他选项时如何显示输入 query mysql query SELE
  • Visual Studio 2015 + Xamarin + 本机便携式 PCL + WCF

    因此 我们的企业正在使用 Visual Studio 走 Xamarin 路线 浏览所有在线文档表明 从 Web 服务创建 WCF 代理客户端并将其放置在 PCL 中应该很简单 经过一番努力并试图找出为什么我无法使用 SLSVcUtil e
  • JavaScript使用变量的基本功能

    我目前正在 Codecademy 上学习 JavaScript 在那里 它给出了一个基本变量的示例 var divideByThree function number var val number 3 console log val 然而
  • C# 使用反射时确定 Nullable 属性 DateTime 类型

    我有一个关于如何确定对象的 Nullable 属性类型的问题 ObjectA有财产DateTime CreateDate 当我像下面的代码一样迭代它的属性时 如何检查属性是否是Nullable DateTime type foreach P
  • 在 PowerShell v3 中运行并行 Invoke-WebRequest 作业

    在 PowerShell 中运行同步后台作业非常简单 但我似乎无法让它与新的 v3 中 cmdlet Invoke WebRequest 一起使用 我正在通过 PowerShell 以脚本方式下载数千个文件 效果很好 但串联起来需要几天时间