我们在分布式计算环境中运行一些进程。一台机器上的进程需要与其他机器上的进程通信信息。其中一个信息就是某些文件的位置。因此,一台机器上的进程可能已将信息放入特定网络共享上的特定文件中,并且需要将该位置传递给另一台机器上的进程。
我们对通讯部分没有任何问题。问题在于确定机器需要传播的“位置”信息。涉及驱动器映射的文件路径显然是无用的:不同的机器将具有不同的驱动器映射。因此,我们需要将完整的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”,即使驱动器及其所有文件都可访问。 (实际上,正在运行的脚本甚至位于假定的“断开的网络驱动器”上。)在这种情况下,逻辑磁盘信息的ProviderName
字段为空。似乎没有任何东西从“断开的网络驱动器”中翻转状态,也没有找到任何更新ProviderName
信息的方法。
那么,有没有人知道(1)如何从powershell中“重新连接”断开的网络驱动器,或者(2)如何在Powershell中以更可靠的方法获取目录的UNC路径信息?感谢。
答案 0 :(得分: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)
你们已经完成了