-2

在我的 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,则不会发生冲突。因为该命令在远程计算机上使用动态会话。

4

2 回答 2

1

根据来自 的文档Get-Help New-PSDrive -full,新驱动器的名称以字符串形式提供,因此如果您可以在将字符串传递给之前从首选信息(时间戳等)构建字符串,则New-PSDrive可以将其用作驱动器名称。\请注意,您应该避免在路径名中出现问题的字符,例如空格和保留字符(例如,、、、、通配符:/)。

由于您的编辑显示您正在使用ROBOCOPYPowerShell 的代码/内存空间“外部”运行,因此您可能无法使用它New-PSDrive来建立映射 - 我的结果与此不一致。更可靠的是建立映射NET USE- 在你的情况下,NET USE J: $appsource可能会成功。

于 2018-12-21T14:27:52.087 回答
0

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

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

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

于 2018-12-27T19:56:19.800 回答