在Powershell脚本中,我正在使用New-PSDrive函数将远程服务器文件路径映射为Windows部署操作过程中的本地计算机。
我计划将来再次使用此Powershell脚本,因此,我不希望由于命名而导致驱动器之间发生任何冲突。例如,如果两个部署操作需要同时到达脚本,则两个部署之一将被错误地部署。
这是问题:我可以使用时间戳或任何其他唯一信息作为驱动器映射名称吗?这样,我可以确定避免名称冲突。
编辑:
我尝试创建不带有持久参数的自定义命名new-psdrive映射,但是那样,powershell尝试使用相对路径(在当前工作目录下)访问该文件夹
这是我尝试复制一些文件(备份)的代码:
$day = Get-Date -Format "yyyyMMdd"
$appsource = "\\$computername\D$\Applications"
New-PSDrive -Name J -PSProvider FileSystem -Root $appsource-Credential $cred -persist
Write-Host "Backup işlemi başladı."
robocopy "J:\App" "J:\backup\$day"
编辑2:
您不能使用动态名称作为持久驱动器映射名称。如果要访问跨域计算机,最好的方法是(但经济高效的方法)使用Invoke-Command在远程计算机上运行脚本。需要允许2种方式(远程本地,本地远程)文件共享权限。如果使用Invoke-Command,则不会发生冲突。因为该命令在远程计算机上使用动态会话。
答案 0 :(得分:1)
根据Get-Help New-PSDrive -full
中的文档,新驱动器的名称以字符串形式提供,因此,如果您可以根据首选信息(时间戳等)构建字符串,然后再将其传递给{{1 }},您可以将其用作驱动器名称。请注意,应避免在路径名中出现问题的字符,例如空格和保留字符(例如New-PSDrive
,\
,:
,通配符等)。 / p>
由于您的编辑显示您正在使用/
(在PowerShell的代码/内存空间外部运行),因此您可能无法使用ROBOCOPY
建立映射-我已经结果与此不一致。更可靠的方法是使用New-PSDrive
建立映射-在您的情况下,NET USE
可能会成功。
答案 1 :(得分:0)
由于Windows映射的驱动器对名称有严格的要求(这是在使用persist参数时创建的),因此使用invoke-command并传入脚本块可能比映射驱动器更好。
$SB = {
$day = Get-Date -Format "yyyyMMdd"
Robocopy "D:\Test\App" "D:\Test\backup\$day"
}
Invoke-Command -ComputerName $CompName -Credential $cred -ScriptBlock $SB
通过这种方式,无需担心映射的驱动器碰撞