使用 powershell 脚本和任务计划将文件复制到网络驱动器

使用 powershell 脚本和任务计划将文件复制到网络驱动器

我有 powershell 脚本,用于将文件从本地驱动器复制到网络映射驱动器。当我通过 powershell 运行此脚本时,一切正常,但当我使用任务计划程序运行此脚本时,它不起作用。我还创建了一行简单的脚本来创建文件

New-Item -Path "Z:\DBBackups\" -Name testfile -Value "test123" -ItemType file -force

该脚本通过 powershell 与映射网络驱动器的路径一起工作,并且当路径在本地驱动器时与任务计划程序一起工作,但是当路径在网络驱动器时不起作用。

任务计划程序设置:操作:启动程序

程序/脚本:powershell.exe

添加参数:-ExecutionPolicy Bypass -File“E:\t.ps1”

我将运行任务的帐户设置为管理员,该帐户具有网络磁盘的权限,并且设置为在用户未登录时运行脚本,不存储密码并具有最高权限

我该怎么做才能使用利用网络驱动器的脚本的任务计划程序?

答案1

您没有指定您是在域中还是在工作组中。您遇到的主要问题是您以管理员身份运行脚本,这与网络共享上的“管理员”帐户不同。

如果这是一台工作组计算机,那么这将行不通。唯一可以使用的解决方法是使用纯文本凭据让脚本映射您的驱动器号。非常不安全,但如果您锁定远程帐户并仅授予其对文件夹的写入权限,则可以限制您的暴露。

如果这是一个活动目录域,那么您很幸运。您需要更改计划任务并在服务帐户下运行它。在这种情况下,管理员帐户无权访问网络资源,并且由于它与远程服务器上的帐户不同,因此无法对远程共享进行身份验证。服务帐户应该是域用户/组管理的服务帐户。您需要在远程共享和 NTFS 级别授予此帐户访问权限。

就像 Peter Hahndorf 已经建议的那样,您应该将 -Path 参数更改为使用远程共享的网络路径而不是驱动器号。如果驱动器号是映射驱动器,则驱动器号对于每个用户都是唯一的,如果您在登录名下映射了驱动器号,则管理员帐户也无法使用该驱动器号。

ripvlan 也对签署脚本提出了非常好的建议。它不仅使您不必更改执行策略,而且还防止其他人将额外/恶意代码放入您的脚本并在您不知情的情况下执行它。一旦脚本被签名,对该脚本的任何更改都需要重新签名,然后您才能再次使用它。

答案2

我可以建议签署您的脚本吗?我按照这些说明编写了一个类似的脚本,该脚本构建了一个部署包。我的脚本需要可移植,我厌倦了必须更改执行策略。它还访问被默认策略阻止的受保护资源(例如,在推送到共享之前对文件夹进行 ZIP 压缩)。签名后,您需要将其中一个证书部署到运行脚本的服务器。

以下是带有大量指导的说明(对我而言,在 Windows 10 上有效,甚至部署到 Windows 2008 R2 服务器)。

https://www.hanselman.com/blog/SigningPowerShellScripts.aspx

我以前尝试过通过阅读 MSDN 进行签名,但最终失败了。对我来说,最大的惊喜是这个过程会将一个编码的文本块插入到你的脚本中。我不明白证书签名文件去了哪里。

作为替代解决方案,您可以查看 Robocopy。为什么要重新发明轮子 :-)

相关内容