Изпълняваме някои процеси в разпределена изчислителна среда. Процесите на една машина трябва да комуникират информация с процеси на други машини. Една от тези части от информацията е местоположението на определени файлове. По този начин процес на една машина може да е поставил информация в определен файл на конкретен мрежов дял и трябва да съобщи местоположението на процес на друга машина.
Нямаме проблем с комуникационната част. Проблемът е с определянето на информацията за "местоположение", която машината трябва да разпространи. Пътищата на файлове, включващи картографиране на устройства, са очевидно безполезни: различните машини ще имат различни картографиране на устройства. По този начин, това, от което се нуждаем, за да му съобщим пълното 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 пътя за директория по по-надежден метод, описан по-горе? Благодаря.