2016-09-23 51 views
0

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

+0

可以有空格或冒号,无论是工作,我发现冒号直观地连接参数和值,这使得代码对我来说更具可读性。 编辑:有关冒号的评论被删除了吗? – Gordon

回答

0

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

documentation

-Persist

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

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

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

嗯,所以旧的DOS命令可能没有VB脚本方法的问题?将不得不明天尝试! – Gordon

+0

该命令来自Windows NT并且与DOS无关。 –

+0

啊,是的,不好混淆DOS命令行。不同的生物。也就是说,我尝试了使用Net Use的方法,结果相同。我在资源管理器中得到了驱动器盘符,但如果稍后在代码中尝试使用驱动器号创建文件夹,则会出现DriveNotFoundException错误。 :(但是,当我做了两个小小的线测试它的工作,所以也许在使用我有多个功能的事实,更多的测试。 – Gordon