请帮我安排 WebDAV 的备份。我有两个 WebDAV,一个在 Debian11/Nginx 上,另一个在 WindowsServer2019/IIS 上。我想在我的 Windows 11 上从这两个文件进行备份。PowerShell 脚本片段:
$NetworkPaths = "\\<server1.domain1>@SSL\DavWWWRoot", "\\<server2.domain2>@SSL\DavWWWRoot"
...
$BackupSource | % {$counter = 0} {
net use Z: $NetworkPaths[$counter] $NetworkPwds[$counter] /user:$NetworkLogin /persistent:no
robocopy $_ $BackupDir[$counter] /Z /R:3 /COPY:DT
net use Z: /delete
$counter++}
从 PowerShell ISE 运行时,此方法可正常工作。此方法适用于 Debian11/Nginx 共享,但从 TaskScheduler 以系统身份以最高权限运行且工作目录为 时,此方法不适用于 WinServer2019/IIS 共享。c:\
第二次复制未执行。我也尝试过
$pass=$NetworkPwds[$counter]|ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential($NetworkLogin,$pass)
New-PSDrive -Name Z -PSProvider FileSystem -Root $NetworkPaths[$counter]
$exclude = Get-ChildItem -recurse $BackupDir[$counter]
Copy-Item -Path ($_ + "\*") -Destination $BackupDir[$counter] -Exclude $exclude -Confirm:$false
Get-PSDrive Z | Remove-PSDrive
在 PowerShell ISE 中运行良好,但在 TaskScheduler 中却不行。我觉得我的 IIS WebDAV 共享有点问题。每次重启 Windows 时我都需要重新输入密码,而 Nginx 共享密码存储正确,我只需按“确定”即可。
答案1
此解决方案要求在进行调度的指定机器上存在有效的用户帐户。为了确保在此帐户下顺利执行任务调度程序作业,建议关联的 Windows 机器至少登录过此帐户一次。此外,确保帐户的密码不会过期也很重要,因为过期可能会导致作业失败。
脚步
使用为任务计划程序作业指定的用户帐户登录 Windows 计算机。
确认帐户的密码未过期。不需要管理权限。
确认该帐户对目标共享(以及其共享和 NTFS 权限)和相应的底层文件夹拥有适当的权限。
以此帐户登录后,执行提供的 PowerShell 脚本。确保
Out-File
帐户本身可以访问用于该操作的文件夹和路径。在脚本执行期间,根据提示提供帐户凭据。这些相同的凭据应该用于计划作业配置。
$cred = Get-Credential; ## Type in username and password
$cred.Password | ConvertFrom-SecureString | Out-File "C:\Folder\path\file.txt"; ## Saved encrypted pass to file
- 现在,您可以使用下面提供的逻辑作为示例来配置脚本。但是,请确保根据您的特定要求对其进行自定义,包括适当的用户名,并
copy-item
相应地调整源路径和目标路径。
$Username = "username123";
$aToken = "C:\Folder\path\file.txt";
$SecurePassword = Get-Content $aToken | ConvertTo-SecureString;
$UserCredential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$SecurePassword;
New-PSDrive -Name Z -PSProvider FileSystem -Root $NetworkPath -Credential $UserCredential;
Copy-Item -Path ($NetworkPath + "\*") -Destination $BackupDir -Exclude $exclude -Confirm:$false;
Get-PSDrive Z | Remove-PSDrive;
- 设置任务计划程序作业时,请确保您使用具有必要权限的帐户登录到计算机。将作业配置为在此特定用户的上下文中运行,而不是使用该
SYSTEM
帐户。这样,用户将能够解密密码并将适当的凭据作为参数值传递,从而促进驱动器映射过程。
另请注意,以具有共享和文件夹权限的指定用户身份进行操作可以消除生成用户特定的加密密码文件的需要。考虑到该作业在已经拥有所需权限的帐户下执行,这可能是不必要的。
然而,必须认识到,此加密密码文件值不可转移以部署到其他机器上,即使在相同的用户凭据下或在同一台机器上使用不同的用户配置文件也是如此。在创建加密密码时,为每个用户-机器配对创建一个唯一的密码至关重要。更改密码需要创建新的加密密码。