我在一个小型商业环境(Win 7 Pro 64工作组,单一局域网)中,我希望能够运行一个脚本,将本地计算机上的链接转换为我们NAS上的文件夹,复制系统还原文件,然后删除链接。目标是将系统还原隔离为一个额外的保护层,理想情况下,此过程包括从任何用户计算机切断到NAS的直接链接,除非复制这些文件。
我已经允许访问我的帐户的System Volume Information文件夹。
搜索已发现很多关于mklink脚本的帖子,但我找不到我想要的实例,而且我所见过的语言范围从bash到Powershell。
我在VBA中编写了很多脚本但没有使用Powershell,甚至在VBScript中编写了很多脚本,哪种语言最合适呢?如果Powershell我将不得不在Win 7机器上安装它,那不是什么大不了的事。 VBScript或批处理对我来说是最容易编写和分发的。我也在我的机器上安装了perl,但是必须将它安装在少数其他机器上。
我的第一个问题是:在这种情况下哪种语言最好?如果可能,我更喜欢VBScript或批处理,或者Powershell。必要时perl。
第二个问题:有人可以给我一个示例脚本吗?典型的mklink命令看起来像这样(根据我的理解):
mklink / d:name :: target:
我应该使用/ j标志而不是/ d吗?我应该安装驱动器(我不清楚如何使用Windows CLI或Powershell执行此操作)?
如果这首先不起作用,请随时告诉我。感谢。
答案 0 :(得分:0)
因此,您可以轻松地使用PowerShell执行此操作。您不会使用MKLink,但会创建一个到NAS位置的临时映射(自从我使用真正的NAS以来已经好几年了,我希望我记得正确,并且他们确实有一个UNC路径,例如\ NAS01 \分享)。因此,您将使用New-PSDrive,并且不使用-Persistent参数,因此当脚本结束并退出PowerShell会话时,连接将结束。然后,您可以根据需要复制文件。实际上,您可以将其设置为检查两个位置中的所有文件,并仅上载本地更新的文件。因此,假设您在共享上创建了要备份的每台计算机的文件夹,您可以执行此操作:
New-PSDrive -Name NAS -Root \\NAS01\Share\$env:COMPUTERNAME -PSProvider FileSystem
$Source = 'C:\System Volume Information'
Compare-Object (Get-ChildItem $Source -Recurse) (Get-ChildItem 'NAS' -Recurse) -PassThru |
Where{$_.SideIndicator -eq "<="} | ForEach{Copy-Item $_.FullName -Destination ($_.FullName -Replace [regex]::escape($source), 'NAS:')}
这实际上创建了一个名为NAS的驱动器,该驱动器映射到所描述的网络路径,然后为两个位置提取目录列表,对于源中不在目标中的项目,它将其复制到目标。脚本运行完成后,PowerShell应退出并删除指向NAS的链接。