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

Powershell 如何获取“上的UNC驱动器信息”;断开网络驱动器“;,powershell,network-drive,drive-mapping,Powershell,Network Drive,Drive Mapping,我们在分布式计算环境中运行一些进程。一台机器上的进程需要与其他机器上的进程通信信息。这些信息之一是某些文件的位置。因此,一台机器上的进程可能已将信息放入特定网络共享上的特定文件中,并且它需要将位置传达给另一台机器上的进程 我们在沟通方面没有问题。问题在于确定机器需要传播的“位置”信息。涉及驱动器映射的文件路径显然是无用的:不同的机器将有不同的驱动器映射。因此,我们需要向它传递完整的UNC路径名 在大多数情况下,我们可以很容易地获得这些信息。我们遇到问题的一个地方是需要获取此信息的powershe

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

我们在沟通方面没有问题。问题在于确定机器需要传播的“位置”信息。涉及驱动器映射的文件路径显然是无用的:不同的机器将有不同的驱动器映射。因此,我们需要向它传递完整的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中会显示为“断开连接的网络驱动器”,即使该驱动器及其所有文件都可以访问。(实际上,正在运行的脚本甚至位于假定的“断开连接的网络驱动器”上。)在这种情况下,逻辑磁盘信息的
ProviderName
字段为空。“断开网络驱动器”的状态似乎没有改变,我也没有找到任何方法来更新
ProviderName
信息


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

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

$UNC应该是一个字符串,其值类似于“\Server01\FileShare$”,我想这就是您想要的。然后你就可以做一个

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

您已经准备好了

我发现最好的做法是避免完全使用驱动器号映射。很好。谢谢到目前为止,这在我能够测试的情况下仍然有效。不过,还需要进行更多的测试。特别是,需要在“断开网络驱动器”的情况下进行测试,我现在不能在这里的机器上复制这种情况。这确实适用于断开的驱动器以及
Gwmi Win32_LogicalDisk
不提供任何信息的其他情况。谢谢
$Path.Replace("$DrvLtr`:",$UNC)