Если я запрашиваю диски сразу после запуска ПК, я получаю список без сетевых дисков:

PS C:\Users\thomas> get-psdrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                 211,64         32,50 FileSystem    C:\                                                  Users\thomas
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

Позже, когда сетевые диски подключены, список становится длиннее (обратите внимание на диск W:):

PS C:\Users\thomas> get-psdrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                 211,73         32,41 FileSystem    C:\                                                  Users\thomas
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
W                  61,51        279,95 FileSystem    \\server\files
WSMan

Команда net use выводит список этих сетевых дисков, даже если они не подключены. Что такое эквивалент PowerShell от net use?

Я пытался найти функции в Powershell ISE для фильтра get*net* и get*drive* но мне не удалось найти функцию, которая бы соответствовала моим потребностям.

После предложений @MrPowerUser я попробовал

Get-WmiObject -Class win32_mappedlogicaldisk | select deviceid

а также

Get-WmiObject -Query "Select * From Win32_LogicalDisk Where DriveType = 4"

Но это приводит только к подключенным дискам. Я ищу те, которые не связаны.

1 ответ1

0

Это результат того, как работает Windows. То есть, это поведение разработано.

Диски еще не существуют, потому что Windows еще не сопоставила их. Это происходит не сразу, потому что ОС предоставляет пользователю контроль до того, как вход в систему фактически завершен. Это компромисс между необходимой функциональностью и временем для удобства использования. Самое лучшее, что вы можете сделать, - это перечислить диски в HKEY_CURRENT_USER\Network или HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 которые должны включать большинство подключенных к сети дисков. Однако те, которые отображаются в соответствии с предпочтениями групповой политики или не отображаются постоянно, могут вообще отсутствовать в реестре.

Вы можете предотвратить это поведение, отключив функцию быстрой регистрации, используя групповую политику, чтобы заставить Windows ожидать сеть при входе в систему, или функцию "Синхронизировать сценарии входа в систему", чтобы заставить систему запускать все сценарии перед запуском Explorer. , Я не уверен, как второй взаимодействует с настройками GP. Тем не менее, в любом случае есть некоторые довольно существенные побочные эффекты, такие как более медленный вход в систему или возможные проблемы с невозможностью войти в систему, если ваш компьютер не подключен к сети (например, ноутбук вне офиса). Вы ничего не ускоряете здесь. Вы просто принудительно откладываете вход в систему, чтобы закончить еще что-то, прежде чем Windows позволит пользователю что-либо сделать.

Если вам действительно нужно запустить сценарий при входе в систему, который обращается к общему сетевому ресурсу, вы должны использовать путь UNC, а не сетевой диск. Следует отметить, что большинство командлетов PowerShell поддерживают пути UNC.

Если вам нужно убедиться, что подключенный диск существует, вам просто нужно подождать.

Что такое эквивалент PowerShell от net use?

Get-PSDrive и New-PSDrive .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .