首页 文章

如何获取“断开的网络驱动器”上的UNC驱动器信息

提问于
浏览
1

我们在分布式计算环境中运行一些进程 . 一台机器上的进程需要与其他机器上的进程通信信息 . 其中一个信息就是某些文件的位置 . 因此,一台机器上的进程可能已将信息放入特定网络共享上的特定文件中,并且它需要将该位置传送给另一台机器上的进程 .

我们对通信部分没有任何问题 . 问题在于确定机器需要传播的“位置”信息 . 涉及驱动器映射的文件路径显然是无用的:不同的机器将具有不同的驱动器映射 . 因此,我们需要将完整的UNC路径名称传达给它 .

在大多数情况下,我们可以轻松获取该信息 . 我们遇到问题的地方是需要获取此信息的powershell脚本 . 目前,我们使用以下代码:

$l_logicalDisk = Gwmi Win32_LogicalDisk -filter "DeviceID = '$l_currentDrive'"
if ( $l_logicalDisk.DriveType -eq 4 )
{
    $l_base = $l_logicalDisk.ProviderName
}

$l_base 提供 \\computername\share 信息 . 但是,在某些情况下,这会失败 . 有时,由于某些未知原因,映射驱动器将在Explorer.exe中显示为"Disconnected Network Drive",即使驱动器及其所有文件都可访问 . (实际上,正在运行的脚本甚至位于假定的"Disconnected Network Drive"上 . )在这种情况下,逻辑磁盘信息的 ProviderName 字段为空 . 似乎没有任何东西从"Disconnected Network Drive"翻转状态,也没有找到更新 ProviderName 信息的方法 .

那么,有没有人知道(1)如何从powershell中“重新连接”断开的网络驱动器,或者(2)如何在Powershell中以更可靠的方法获取目录的UNC路径信息?谢谢 .

1 回答

  • 2

    您可以随时询问注册表,这应该适用于断开连接的驱动器(其中 $DrvLtr 等于所需的网络映射驱动器号,如Z或M):

    Pushd
    cd HKCU:
    $UNC=(gci network|?{$_.Name -match "$DrvLtr"}|%{Get-ItemProperty -Path $_}).RemotePath
    Popd
    

    然后$ UNC应该是一个字符串,其值为“\ Server01 \ FileShare $”,我认为这就是你想要的 . 然后你可以做一个

    $Path.Replace("$DrvLtr`:",$UNC)
    

    而且你们都准备好了

相关问题