Obtendo as unidades de rede não conectadas

0

Se eu consultar as unidades logo após a inicialização do PC, receberei uma lista sem unidades de rede:

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

Mais tarde, quando as unidades de rede estão conectadas, a lista é mais longa (observe a unidade 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

O comando net use lista essas unidades de rede, mesmo que não estejam conectadas. Qual é o equivalente a Powershell de net use ?

Eu tentei pesquisar funções no Powershell ISE para o filtro get*net* e get*drive* , mas não consegui encontrar uma função que atendesse às minhas necessidades.

Após as sugestões de @MrPowerUser, tentei

Get-WmiObject -Class win32_mappedlogicaldisk | select deviceid

e

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

Mas isso resulta apenas nas unidades conectadas. Estou procurando os que não estão conectados.

    
por Thomas Weller 08.05.2018 / 08:42

1 resposta

0

Este é um resultado de como o Windows funciona. Ou seja, esse comportamento é por design.

As unidades ainda não existem porque o Windows ainda não as mapeou novamente. Ele não faz isso imediatamente porque o sistema operacional fornece o controle do usuário antes que o logon seja realmente concluído. Esta é uma troca entre a funcionalidade exigida e o tempo para a usabilidade. O melhor que você pode fazer é enumerar as unidades em HKEY_CURRENT_USER\Network ou HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 , que devem incluir a maioria das unidades mapeadas em rede. No entanto, aqueles mapeados por preferências de política de grupo ou que não são mapeados persistentemente podem não estar presentes no registro.

Você pode ser capaz de evitar esse comportamento desabilitando a Otimização de Logon Rápido por usando a Diretiva de Grupo para forçar o Windows a aguardar a rede no logon, ou o " Executar scripts de logon sincronicamente "para forçar a forçar o sistema a executar todos os scripts antes de iniciar o Explorer. Não tenho certeza de como o segundo interage com GP Preferences. No entanto, de qualquer forma, há alguns efeitos colaterais significativos, como logon mais lento ou possíveis problemas com a impossibilidade de logon se o computador não estiver conectado à rede (por exemplo, um laptop externo). Você não está acelerando nada aqui. Você está apenas atrasando o logon para que mais coisas acabem antes que o Windows permita que o usuário faça qualquer coisa.

Se você realmente precisar executar um script no logon que acesse um compartilhamento de rede, deverá usar o caminho UNC e não a unidade de rede. Deve-se observar que a maioria dos cmdlets do PowerShell oferece suporte a caminhos UNC.

Se você precisar verificar se existe uma unidade mapeada, basta aguardar.

What is the Powershell equivalent of net use?

Get-PSDrive e New-PSDrive .

    
por 10.05.2018 / 05:15