映射的驱动器号立即可用?

时间:2016-09-23 15:44:35

标签: powershell-v2.0 mapped-drive

我使用它来映射PowerShell v2中的驱动器号,它的工作原理是驱动器号显示并可在资源管理器中使用。

$Network = New-Object -ComObject "Wscript.Network"
$Network.MapNetworkDrive($drive.name, $drive.value, $true)

但是,如果我尝试使用该驱动器号在Powershell中执行任何操作,比如创建一个文件夹,我会得到一个DriveNotFoundException。但正如我所说,驱动器在那里并可手动使用。我以为我可能需要稍等一下,或刷新资源管理器,或两者兼而有之,但这样做似乎不会影响任何事情。但是,如果我转身并重新运行脚本,该脚本会提前检查驱动器是否在那里,并且只创建它,如果没有,它将看到驱动器而不是重新创建,并且后续任务将正常工作。好像驱动器号可能是基于会话的? 我也尝试过添加

New-PSDrive -name:($drive.name -replace ':', '') -psProvider:FileSystem -root:$drive.value -scope:Global

同样,希望这会提供基于会话的驱动,但没有好处。

另一个问题是脚本必须以管理员身份运行,但是,如果我将其作为两个不同的脚本执行,一个用于创建驱动器,另一个用于创建驱动器,则两个脚本都以“管理员身份运行”运行。只有当两个任务都在一个脚本中完成时才会失败。

最后一点,我知道PS 3有更好的方法来处理映射驱动器,但由于我无法控制的事情,我只能使用PS v2。

1 个答案:

答案 0 :(得分:0)

我不认为你想要的是PowerShell v2。要New-PSDrive创建Windows驱动器,您需要添加参数-Persist,这在PowerShell v2中不可用。

来自documentation

  

-Persist

     

创建Windows映射的网络驱动器。映射的网络驱动器保存在本地计算机上的Windows中。它们是持久的,而不是特定于会话的,可以在文件资源管理器和其他工具中查看和管理。

我说你最好的选择(除了升级到PowerShell v3或更新版本)是使用net命令:

& net use $drive.name $drive.value /persistent:yes