Azure DevOps中Copy-Item报错“用户名或密码错误”求助
解决Azure DevOps流水线Copy-Item报错“用户名或密码不正确”的问题
可能的原因及解决步骤
1. 检查自托管代理的运行账户
- 如果你的流水线用的是自托管代理,脚本默认会以代理服务启动时的账户执行,这个账户和你流水线变量里设置的服务账户是两回事。
- 操作:到代理所在机器,打开「服务」,找到
Azure DevOps Agent服务,查看「登录」标签页的账户信息:- 如果是域账户,确认密码是否已修改但未更新服务登录密码;
- 如果是本地账户,确认该账户对目标共享目录
\\server\test\project\files有写入权限。
2. 确保流水线变量的密码正确传递
- 机密变量默认不会自动注入到PowerShell的环境变量中,需要手动映射:
- 编辑PowerShell任务,找到「环境变量」区域;
- 添加两个映射:
- 键:
SERVICE_USERNAME,值:$(你的服务账户用户名变量名) - 键:
SERVICE_PASSWORD,值:$(你的服务账户密码变量名)
- 键:
- 保存任务配置,重新运行流水线。
3. 修改脚本显式使用指定服务账户
- 避免依赖代理账户,直接在脚本中使用流水线配置的服务账户访问共享目录,示例代码:
# 从环境变量读取凭据 $username = $env:SERVICE_USERNAME $securePassword = ConvertTo-SecureString $env:SERVICE_PASSWORD -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential ($username, $securePassword) # 挂载共享目录为临时驱动器 New-PSDrive -Name TempShare -PSProvider FileSystem -Root "\\server\test\project\files" -Credential $cred # 执行复制操作 Copy-Item -Path D:\Config\*.* -Destination "TempShare:\" -Recurse # 移除临时驱动器(可选) Remove-PSDrive TempShare
4. 验证目标共享目录的权限
- 登录到共享目录所在服务器,检查:
- 你的服务账户(或代理运行账户)是否在共享目录的「共享权限」和「NTFS权限」中拥有写入/修改权限;
- 权限是否被最近的变更覆盖。
内容的提问来源于stack exchange,提问作者Raghul Raman
相关产品推荐
相关产品推荐

