在我的powershell脚本中,我使用New-PSDrive函数将远程服务器文件路径映射到我的本地计算机,作为windows部署操作过程。
我计划将来重用这个Powershell脚本,所以我不希望驱动器之间因为命名而发生任何冲突。例如,如果两个部署操作需要同时到达脚本,那么其中一个将被不正确地部署。
这就是问题所在:我可以使用时间戳或任何其他唯一信息作为驱动器映射名称吗?这样,我就可以肯定地避免名称冲突。
编辑:
我曾尝试在没有持久参数的情况下创建自定义命名的新psdrive映射,但通过这种方式,powershell尝试访问具有相对路径的文件夹(在当前工作目录下)
这是我尝试复制一些文件(备份)的代码:
$day = Get-Date -Format "yyyyMMdd"
$appsource = "\$computernameD$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:
不能将动态名称用作持久驱动器映射名称。若要访问跨域计算机,最好的方法是(但经济高效的方法)使用InvokeCommand在远程计算机上运行脚本。需要允许双向(远程-本地、本地-远程)文件共享权限。如果使用Invoke命令,则没有冲突。因为该命令在远程计算机上使用动态会话。
根据Get-Help New-PSDrive -full
的文档,新驱动器的名称是以字符串的形式提供的,因此,如果您可以在将其传递给New-PSDrive
之前根据首选信息(时间戳等)构建字符串,则可以将其用作驱动器名称。请注意,您应该避免路径名中有问题的字符,例如空格和保留字符(例如,、
:
、/
、通配符等)。
由于您的编辑显示您使用的是"在"PowerShell的代码/内存空间之外运行的ROBOCOPY
,因此您可能无法使用New-PSDrive
来建立映射——我的结果与此不一致。更可靠的是用NET USE
建立映射——在您的情况下,NET USE J: $appsource
可能会起作用。
由于Windows映射的驱动器对名称有严格要求(使用persistent参数时会创建名称),因此使用invoke命令并传入脚本块可能比映射驱动器更好。
$SB = {
$day = Get-Date -Format "yyyyMMdd"
Robocopy "D:TestApp" "D:Testbackup$day"
}
Invoke-Command -ComputerName $CompName -Credential $cred -ScriptBlock $SB
这种方式消除了对映射驱动器碰撞的担忧