【问题标题】:Mapped drive letters immediately available?映射的驱动器号立即可用?
【发布时间】:2016-09-23 15:44:34
【问题描述】:

我正在使用它来映射 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。

【问题讨论】:

  • 可以有空格也可以有冒号,都可以,我发现冒号在视觉上连接了参数和值,这使代码对我来说更具可读性。编辑:询问冒号的评论是否被删除?

标签: powershell-2.0 mapped-drive


【解决方案1】:

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

来自documentation

-Persist

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

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

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

【讨论】:

  • 嗯,旧的 DOS 命令可能没有 VB 脚本方法的问题?明天一定要试试!
  • 该命令来自Windows NT,与DOS无关。
  • 啊,是的,将“命令行”与 DOS 混为一谈不好。不同的小动物。也就是说,我尝试了 Net Use 方法,结果相同。我在资源管理器中获得驱动器号,但如果稍后在代码中尝试使用驱动器号创建文件夹,则会出现 DriveNotFoundException 错误。 :( 但是,当我做了一点两行测试时,它起作用了,所以也许在使用中我有多种功能。更多要测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多