Как получить информацию о диске UNC на "Отключенный сетевой диск"
Мы запускаем некоторые процессы в распределенной вычислительной среде. Процессы на одной машине должны обмениваться информацией с процессами на других машинах. Одним из таких кусочков информации является местоположение определенных файлов. Таким образом, процесс на одной машине может поместить информацию в конкретный файл на определенном сетевом ресурсе, и ему необходимо сообщить о местоположении процессу на другой машине.
У нас нет проблем с коммуникационной частью. Проблема заключается в определении информации о местоположении, которую машина должна распространять. Пути к файлам, включающие сопоставления дисков, явно бесполезны: разные машины будут иметь разные сопоставления дисков. Таким образом, нам нужно сообщить ему полное имя пути 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 для каталога более надежным способом, описанным выше? Благодарю.
1 ответ
Вы всегда можете спросить реестр, это должно работать на отключенных дисках (где $DrvLtr
равняется требуемой букве сетевого подключенного диска, например Z или M):
Pushd
cd HKCU:
$UNC=(gci network|?{$_.Name -match "$DrvLtr"}|%{Get-ItemProperty -Path $_}).RemotePath
Popd
В этом случае $UNC должна быть строкой со значением типа "\Server01\FileShare$", которое, я думаю, и будет вашим намерением. Тогда вы можете просто сделать
$Path.Replace("$DrvLtr`:",$UNC)
И все готово