Como posso usar o powershell para verificar se uma unidade mapeada está aberta / conectada?

3

Estou escrevendo um script de login que desmata e remapeia algumas unidades.

O powershell chama um pequeno arquivo em lote para o não mapeamento real, já que o Powershell parece um pouco desajeitado ao mapear as unidades de forma confiável.

O código que estou usando é:

    $arrDrives = "m:","n:","o:","p:","q:","r:","s:","u:","v:","x:","y:"
    foreach ($drive in $arrDrives) { 
        if (test-path $drive) {
            UpdateSubHeading ("Removing drive " + $drive)
            c:\bin\removeDrive.bat $drive } 
    }

E o arquivo em lote que ele chama é apenas:

if exist %1 net use %1 /del

Tudo isso funciona bem, a menos que haja uma conexão aberta com a unidade que ele está tentando remover. Se o usuário tiver um arquivo aberto, ele será interrompido.

Existe uma maneira de verificar se há alguma conexão aberta na unidade mapeada antes de tentar remover o mapeamento e pular o não mapeamento, se houver?

Obrigado,

Ben

    
por Ben 20.07.2010 / 10:57

1 resposta

5

O script provavelmente está aguardando permissão para excluir a conexão

por exemplo,

M:\>net use m: /delete
There are open files and/or incomplete directory searched pending on the connection to m:.

Is it OK to continue disconnection and force them closed (Y/N) [N]:

Você precisa fornecer a permissão na linha de comando

por exemplo

M:\>net use m: /delete /yes
There are open files and/or incomplete directory searched pending on the connection to m:.

m: was deleted successfully

ou no seu caso

if exist %1 net use %1 /del /yes
    
por 20.07.2010 / 11:47