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 中显示为“断开的网络驱动器”,即使该驱动器及其所有文件都可以访问。(实际上,正在运行的脚本甚至位于假定的“断开的网络驱动器”上。)在这种情况下,ProviderName逻辑磁盘信息字段为空白。似乎没有任何东西可以从“断开的网络驱动器”中翻转状态,我也没有找到任何更新ProviderName信息的方法。

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

4

1 回答 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)

你都准备好了

于 2014-03-07T21:46:45.757 回答