Windows 如何使用打包机供应器中的BITS下载文件?
我正在PowerShell中为CI管道上的Packer构建的Windows映像编写一个配置脚本。这个过程包括下载几个大文件。我的印象是速度比,所以我决定使用BITS异步下载这些大文件 问题是比特 BITS仅在作业所有者登录到计算机时传输文件(用户必须以交互方式登录)。BITS不支持运行方式命令 您可以使用BITS从服务传输文件。服务必须使用LocalSystem、LocalService或NetworkService系统帐户。这些帐户总是登录的;因此,由使用这些帐户的服务提交的作业始终运行 但即便如此,还是有一条皱纹: 如果在系统帐户下运行的服务在调用BITS之前模拟用户,BITS会像对任何用户帐户一样响应(例如,用户需要登录到计算机才能进行传输) 这是一个问题,因为设置脚本作为管理员帐户运行,管理员帐户不是服务帐户,因此必须以交互方式登录才能使用BITS。这是帕克的行为,所以我不能改变。我错了,我可以改变这个。看我最后的答案如何在一个PowerShell脚本中执行以下操作?Windows 如何使用打包机供应器中的BITS下载文件?,windows,powershell,windows-services,packer,microsoft-bits,Windows,Powershell,Windows Services,Packer,Microsoft Bits,我正在PowerShell中为CI管道上的Packer构建的Windows映像编写一个配置脚本。这个过程包括下载几个大文件。我的印象是速度比,所以我决定使用BITS异步下载这些大文件 问题是比特 BITS仅在作业所有者登录到计算机时传输文件(用户必须以交互方式登录)。BITS不支持运行方式命令 您可以使用BITS从服务传输文件。服务必须使用LocalSystem、LocalService或NetworkService系统帐户。这些帐户总是登录的;因此,由使用这些帐户的服务提交的作业始终运行 但
- 使用服务帐户的凭据以管理员身份提交BITS作业。我假设我需要向的
参数传递一些信息-Credential
- 将BITS作业存储在局部变量中(作业将在脚本中的不同位置启动)
- 等待BITS作业完成,以便我可以开始使用我下载的文件(作业将在脚本中的不同位置等待)
事实证明有一个解决方案,尽管它是针对Packer的。我没有多提我对它的使用,因为我认为它没有那么重要 与我最初的想法相反,Packer的PowerShell供应器
和提升的\u用户
(字符串)-如果指定,PowerShell脚本将使用给定的Windows用户以提升的权限运行提升的\u密码
u密码
值,则PowerShell脚本将作为服务帐户运行。例如:
provisioner "powershell" {
elevated_user = "SYSTEM"
elevated_password = ""
}
在相应地调整了我的打包器模板的
provisioner
块之后,我现在可以确认和朋友们按照预期工作。无需传递复杂的参数或在会话中耍花招。我认为您可能在理解“服务帐户”这个模棱两可的术语此处-文档讨论的是配置为使用本地系统帐户登录的Windows服务的安全上下文-没有可传递的凭据可传递给启动位传输-凭据,您需要将整个脚本封装在实际的Windows服务中-这不可能在单个独立脚本中完成(至少没有很多代码和/或环境副作用)。谢谢,我将尝试一下它是否有效。等等,实际上,该解决方案如何不与此相冲突:如果在系统帐户下运行的服务在调用BITS之前模拟用户,BITS的响应与任何用户帐户一样(例如,用户需要登录到计算机才能进行传输)
provisioner "powershell" {
elevated_user = "SYSTEM"
elevated_password = ""
}