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

任务计划程序中PowerShell定时WebDAV备份:IIS共享失败但Nginx共享正常

任务计划程序中PowerShell定时WebDAV备份:IIS共享失败但Nginx共享正常

看起来你遇到的问题核心在于系统账户(System)与普通用户账户的环境差异,以及IIS WebDAV对身份验证的特殊要求——毕竟手动在PowerShell ISE中运行时用的是你的个人账户,而任务计划用的是独立的System账户,两者的凭据存储、权限环境完全不同。结合你描述的现象(IIS共享重启后需重新输密码,Nginx则不用),我整理了几个针对性的排查和解决步骤:

一、先解决System账户的凭据存储问题

System账户有自己独立的凭据管理器,和你日常用的用户账户不共享。你手动运行脚本时能用IIS共享,是因为你的个人账户保存了凭据,但System账户没有。我们需要给System账户添加IIS WebDAV的凭据:

  1. 下载微软Sysinternals的PsExec工具(微软官方工具,安全可靠)
  2. 以管理员身份打开命令提示符,运行:
    psexec -s -i cmd.exe
    
    这会打开一个System权限的命令窗口
  3. 在这个窗口里,添加IIS WebDAV的凭据:
    cmdkey /add:<server2.domain2> /user:<你的NetworkLogin> /pass:<对应的NetworkPwds>
    
    替换掉尖括号里的实际信息,这样System账户就持久保存了IIS共享的凭据

二、检查IIS WebDAV的关键配置

IIS的WebDAV相比Nginx的配置更严格,可能存在权限或身份验证的限制:

  • 打开IIS管理器,找到目标站点,进入WebDAV Authoring Rules:确保规则允许你的NetworkLogin用户拥有读取权限,并且路径范围正确
  • 检查身份验证设置:如果你用的是基本认证,确认站点已启用SSL(你已经用了@SSL,这部分没问题);如果用NTLM认证,确保Windows 11客户端和Windows Server 2019在同一个域,或者有信任关系
  • 进入WebDAV的设置界面,开启Allow Custom Properties和Allow Hidden Files——有些时候这些选项会影响文件的正常访问

三、修改PowerShell脚本,增强可靠性与可排查性

你的脚本在ISE里正常,但在System环境下可能因为驱动器映射、权限问题失败,建议做这些调整:

1. 添加日志输出,方便定位错误

在脚本开头加入日志记录,每次运行都会生成详细日志:

$logPath = "C:\BackupLogs\backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Start-Transcript -Path $logPath -Append

脚本末尾加入:

Stop-Transcript

这样你可以查看日志里的具体错误信息,比如挂载失败、复制时的权限问题等

2. 优化驱动器映射逻辑

避免重复使用同一个驱动器号(比如Z:),如果前一次挂载没正常卸载,会导致后续失败。可以改用动态分配驱动器号,或者直接使用UNC路径而不映射驱动器:

# 改用New-PSDrive并指定凭据,同时确保System账户能正确识别
$pass = $NetworkPwds[$counter] | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential($NetworkLogin, $pass)
# 用-Persist参数让驱动器在System环境下可见
New-PSDrive -Name Z -PSProvider FileSystem -Root $NetworkPaths[$counter] -Credential $cred -Persist

# 复制文件时加入详细输出到日志
robocopy $_ $BackupDir[$counter] /Z /R:3 /COPY:DT /V /LOG+:$logPath

# 确保驱动器被卸载
if (Get-PSDrive Z -ErrorAction SilentlyContinue) {
    Remove-PSDrive Z -Force
}

3. 直接使用UNC路径(可选)

如果映射驱动器总是出问题,可以跳过映射,直接用UNC路径结合凭据访问:

# 直接用Copy-Item结合凭据访问UNC路径
Copy-Item -Path "$($_)\*" -Destination $BackupDir[$counter] -Credential $cred -Recurse -Force -ErrorAction Stop

四、调整任务计划的设置

确保任务计划的配置符合System账户的运行要求:

  • 在“操作”选项卡中,程序/脚本填powershell.exe,参数填:
    -ExecutionPolicy Bypass -File "C:\你的脚本路径\backup_script.ps1"
    
  • 把“起始于(可选)”设置为脚本所在的目录,而不是默认的C:\——有些命令依赖当前工作目录
  • 确认勾选了“不管用户是否登录都要运行”和“以最高权限运行”
  • 查看任务的“历史记录”选项卡,看是否有错误代码(比如0x1表示脚本执行失败,0x0是成功),结合日志排查问题

额外提示:关于IIS共享重启后需输密码的问题

这是因为你的个人账户没有持久保存IIS WebDAV的凭据,下次手动访问时勾选“记住我的凭据”即可;而我们给System账户添加的凭据是持久化的,不会因为重启丢失。

备注:内容来源于stack exchange,提问作者Dmitry Kosovets

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:35:33