1

我在一个小型企业环境(Win 7 Pro 64 工作组,单一 LAN)中,我希望能够运行一个脚本,该脚本将在本地计算机上链接到我们 NAS 上的文件夹,复制系统还原文件,然后删除链接。目标是将系统还原隔离为额外的保护层,此过程理想情况下包括从任何用户计算机切断到 NAS 的直接链接,除非复制这些文件。

我已经允许访问我的帐户的系统卷信息文件夹。

搜索发现了很多关于使用 mklink 的脚本的帖子,但我找不到一个可靠的例子来说明我想要什么,并且我看到使用的语言范围从 bash 到 Powershell。

我在 VBA 中编写了很多脚本,但没有使用 Powershell,甚至没有使用 VBScript,哪种语言最适合这个?如果 Powershell 我将不得不在 Win 7 机器上安装它,这没什么大不了的。VBScript 或批处理对我来说是最容易编写和分发的。我的机器上也安装了 perl,但必须在其他几台机器上安装它。

  • 我的第一个问题是:在这种情况下哪种语言最好?如果可能的话,我更喜欢 VBScript 或批处理,或者 Powershell。perl 如果需要的话。

  • 第二个问题:有人可以给我一个示例脚本吗?典型的 mklink 命令如下所示(据我了解):

    mklink /d :name: :target:

我应该使用 /j 标志而不是 /d 吗?我应该安装驱动器吗(我不清楚如何使用 Windows CLI 或 Powershell 执行此操作)?

另外,如果这首先不起作用,请随时告诉我。谢谢。

4

1 回答 1

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 的链接。

于 2014-09-24T22:47:35.780 回答