2014-03-07 2 views
1

Мы запускаем некоторые процессы в распределенной вычислительной среде. Процессы на одной машине должны передавать информацию с процессами на других машинах. Одной из этих сведений является расположение определенных файлов. Таким образом, процесс на одной машине может помещать информацию в конкретный файл в конкретный сетевой ресурс, и ему необходимо сообщить местоположение процессу на другой машине.Как получить информацию о накопителе 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 пусто. Кажется, что ничего не изменило статус из «Disconnected Network Drive», и я не нашел способа обновить информацию ProviderName.

Итак, знает ли кто-нибудь (1) как «повторно подключить» отключенный сетевой диск изнутри powershell или (2) как в Powershell получить информацию о пути UNC для каталога в более надежном методе, описанном выше? Благодарю.

+0

Я считаю, лучшая практика, чтобы избежать использования букв дисков карты в целом. –

ответ

2

Вы всегда можете обратиться в реестре, это должно работать на отключенных дисках (где $DrvLtr равен заданной сеть отображенной буква диска, такую ​​как Z или М):

Pushd 
cd HKCU: 
$UNC=(gci network|?{$_.Name -match "$DrvLtr"}|%{Get-ItemProperty -Path $_}).RemotePath 
Popd 

$ UNC должен затем быть строкой с значение, подобное «\ Server01 \ FileShare $», которое, я думаю, является тем, что вы собираетесь делать. Тогда вы можете просто сделать

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

И вы все сделали

+0

Ницца. Благодарю. Это работает до сих пор в ситуациях, которые я смог проверить. Тем не менее, нужно еще немного протестировать. В частности, необходимо протестировать ситуацию «Disconnected Network Drive», которую я не могу воспроизвести на машине, которую я здесь сейчас. –

+0

Это действительно работает для отключенных дисков и в других ситуациях, когда 'Gwmi Win32_LogicalDisk' не дает никакой информации. Благодарю. –

Смежные вопросы