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

如何在Windows 10无人值守安装后运行WinGet部署PowerShell脚本?

Windows 10无人值守安装后触发WinGet应用部署脚本的方案

一、无人值守安装触发脚本的可行方法

1. 用NTLite直接配置首次执行任务

你用的是NTLite,直接在工具里配置最方便:

  • 打开NTLite加载你的Windows 10镜像,进入「无人值守」模块
  • 找到「首次登录」或「开机启动」相关设置,把你的PowerShell脚本(或打包后的exe)添加为用户首次登录时自动执行的程序
  • 脚本要提前放到镜像的固定路径,比如C:\Windows\Setup\Scripts——这个目录下的脚本会在系统安装完成、用户首次登录前自动运行,注意要给脚本足够的权限
  • 也可以通过NTLite的「注册表」模块,给HKLM\Software\Microsoft\Windows\CurrentVersion\Run添加一个新项,值设为powershell.exe -ExecutionPolicy Bypass -File "C:\你的脚本路径\Install-Apps.ps1",如果需要只执行一次,可以在脚本末尾添加删除该注册表项的逻辑

2. 编辑无人值守XML文件

如果手动维护无人值守XML,在<FirstLogonCommands>节点下添加执行命令:

<FirstLogonCommands>
    <SynchronousCommand wcm:action="add">
        <CommandLine>powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Install-Apps.ps1"</CommandLine>
        <Description>批量安装WinGet应用</Description>
        <Order>1</Order>
    </SynchronousCommand>
</FirstLogonCommands>
  • 记得提前把脚本放到镜像的对应路径,或者在XML里加<CopyCommand>先把脚本复制到目标系统

3. 批量部署场景用WDS后期任务

如果用Windows部署服务(WDS)分发镜像,可以在部署流程的最后阶段添加自定义任务,触发脚本执行,适合多设备批量部署的情况

二、你的PowerShell脚本优化建议

1. 修复弹窗返回值问题

原来用SET-CLIPBOARD处理返回值没必要,直接把输出丢到null即可:

function GW($myinput){
    $WS = New-Object -ComObject "Wscript.Shell"
    $null = $ws.popup($myinput,3,'TK Installer',64)
}

2. 修正循环逻辑错误

你的$myapps是数组,不需要用Split(','),直接用foreach循环更简单:

foreach ($aa in $myapps) {
    GW "正在安装 $aa`n请稍候..."
    winget install $aa --silent --accept-package-agreements --accept-source-agreements --force
}

3. 添加错误日志

可以加个日志记录,方便排查安装失败的应用:

foreach ($aa in $myapps) {
    GW "正在安装 $aa`n请稍候..."
    try {
        winget install $aa --silent --accept-package-agreements --accept-source-agreements --force
        "$(Get-Date): $aa 安装成功" | Out-File "C:\WinGet安装日志.txt" -Append
    } catch {
        "$(Get-Date): $aa 安装失败 - $_" | Out-File "C:\WinGet安装日志.txt" -Append
        GW "$aa 安装失败`n请查看日志了解详情"
    }
}

三、更优实现方案

1. 用WinGet配置清单批量安装

WinGet支持用YAML或JSON配置文件批量导入应用,比写PowerShell循环更简洁:
创建WinGet安装清单.yaml:

# yaml-language-server: $schema=https://aka.ms/winget-manifest.singleton.1.0.0.schema.json
PackageIdentifier: Microsoft.Winget.Source
PackageVersion: 1.0.0
Commands:
  - install Microsoft.PowerShell --silent --accept-package-agreements --accept-source-agreements --force
  - install Microsoft-Windows.Terminal --silent --accept-package-agreements --accept-source-agreements --force
  # 把你的其他应用依次添加到这里

然后执行命令:winget import -i WinGet安装清单.yaml即可批量安装

2. 离线部署适配

如果部署环境没网络,提前下载WinGet的应用安装包和本地源,放到镜像或共享目录,用winget source add添加本地源,避免依赖网络

3. 封装为预配包

把脚本、WinGet和必要的依赖打包成Provisioning Package(预配包),在无人值守安装时应用,适合企业级标准化部署

内容的提问来源于stack exchange,提问作者J. Breneman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:50:44