New-PSDrive 驱动器映射名称

New-PSDrive drive mapping name

在我的 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 for 运行 脚本。需要允许 2 种方式(远程-本地、本地-远程)文件共享权限。如果你使用 Invoke-Command,你就没有冲突。因为该命令在远程计算机上使用动态会话。

根据 Get-Help New-PSDrive -full 中的文档,新驱动器的名称以字符串形式提供,因此如果您可以在将字符串传递给 New-PSDrive,你可以将它用作驱动器名称。请注意,您应该避免在路径名中出现问题的字符,例如 spaces 和保留字符(例如 \:/、通配符、等)。

由于您的编辑显示您正在使用 ROBOCOPY,它运行 "outside" PowerShell 的 code/memory space,您可能无法使用 New-PSDrive 建立映射 - 我得到了不一致的结果。更可靠的方法是使用 NET USE 建立映射 - 在您的情况下,NET USE J: $appsource 可能会成功。

由于 Windows-映射的驱动器对名称有硬性要求(这是在使用持久参数时创建的名称),使用调用命令并传入脚本块可能比映射驱动器更好完全没有。

$SB = {
$day = Get-Date -Format "yyyyMMdd"
Robocopy "D:\Test\App" "D:\Test\backup$day"
}
Invoke-Command -ComputerName $CompName -Credential $cred -ScriptBlock $SB  

这样就无需担心映射驱动器冲突