Efetuando logout de uma unidade de compartilhamento de rede sem reinicializar?

4

Eu tenho um pequeno script que é executado em cada estação de trabalho que executa defrag e chkdsk e conecta cada estação de trabalho temporariamente a um compartilhamento de rede que eles, normalmente, não têm acesso. O comando que eu uso para se conectar a eles é:

net use \server\sharename [password] /USER:domain\username P:No

Existe um comando para desconectar o usuário do compartilhamento de unidade sem reiniciar o computador?

Estações de trabalho executadas no Windows XP SP3

EDIT: Eu usei:

net use \server\sharename /delete

mas o comando retorna "A conexão de rede não pode ser encontrada". No entanto, ainda posso navegar para \server\sharename na linha de endereço do MyComputer e ter acesso total a ele ainda.

EDIT2: Suponha que eu tenha lido os arquivos de ajuda para uso da rede; D

EDIT3: Uma reinicialização seria suficiente? Sim ... no entanto, é mais conveniente fazer o logout do usuário no compartilhamento = D. Eu sei que sou difícil.

    
por Mechaflash 25.08.2011 / 17:52

4 respostas

4
net use \server\sharename /delete

EDITAR: Para fazer com que as credenciais sejam liberadas:

net use \server\IPC$ /delete
    
por 25.08.2011 / 17:53
3
net use \server\sharename /delete

Veja o comando completo net use aqui .

    
por 25.08.2011 / 18:01
2

Se os comandos net use listados aqui não resolverem o problema, em vez de reinicializar, basta reiniciar o serviço Estação de trabalho (não sei como fazer isso sem a reinicialização do serviço ):

  1. Primeiro, use os comandos net use apropriados, como acima (por exemplo, net use * /del para a abordagem shotgun).
  2. Painel de controle - > Ferramentas Administrativas - > Serviços
  3. Encontre Estação de trabalho na lista.
  4. Clique com o botão direito e escolha Reiniciar .

Se você tiver janelas do explorer abertas para a pasta compartilhada ou qualquer arquivo aberto, talvez seja necessário fechá-las para que o serviço seja reiniciado (se a reinicialização parecer travar, geralmente é por isso).

Como alternativa, você pode reiniciar o serviço na linha de comando com:

net stop Workstation
net start Workstation
net start "Computer Browser"

O navegador de computador é normalmente necessário, pois parar Workstation também pára Computer Browser . Você verá se isso acontece na saída do primeiro comando. Novamente, fechar as janelas do explorador e abrir arquivos pode ser necessário.

Referência: link

    
por 28.02.2015 / 02:56
0

@rocketsarefast e descobri outra maneira de limpar as credenciais da rede. Eu postei minha resposta neste tópico:

  • Como faço para remover credenciais de login para um local de rede no Win7?:

    link

Eu também descobri em @responde do rocketsarefast que o Windows limpará as credenciais de rede antigas quando houver uma nova tentativa de login.

No entanto, seu comando net use "\10.0.0.5\c$" "badpassword" /user:"baduser" é muito lento, especialmente quando o cliente precisa esperar vários segundos até que o servidor responda com uma rejeição, o que é terrível e inconveniente.

Para meu caso de uso, consegui usar a API do Win32 para mapear o compartilhamento de rede \Server\Share para a unidade S:\ . Ele desconecta a unidade primeiro e, em seguida, solicita ao usuário a caixa de diálogo de login da rede do Windows para que a pessoa possa fazer logout e login como um usuário diferente.

Aqui está o código C main.c :

#ifndef UNICODE
#define UNICODE
#endif

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#define _WIN32_IE 0x0500

#pragma comment(lib, L"mpr.lib")

#include <windows.h>
//#include <stdio.h>

int wmain(const size_t argc, const wchar_t** argv) {
    NETRESOURCE networkResource = {0};
    networkResource.dwType = RESOURCETYPE_DISK;
    networkResource.lpLocalName = L"S:";
    networkResource.lpRemoteName = L"\\Server\Share";
    networkResource.lpProvider = NULL;

    DWORD result = 0;
    result = WNetCancelConnection2(networkResource.lpLocalName, CONNECT_UPDATE_PROFILE, TRUE);
//    wprintf(L"WNetCancelConnection2 result: %d\n", result);

    result = WNetAddConnection2(&networkResource, NULL, NULL, CONNECT_INTERACTIVE | CONNECT_PROMPT);
//    wprintf(L"WNetAddConnection2 result: %d\n", result);

//    getchar();

    return EXIT_SUCCESS;
}

Aqui está o CMakeLists.txt :

cmake_minimum_required(VERSION 3.7)
project(MapNetworkDrive)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c11 -g3 -pedantic -Wall -Wextra -O0")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -municode -mwindows")

set(SOURCE_FILES main.c)
add_executable(MapNetworkDrive ${SOURCE_FILES})
target_link_libraries(MapNetworkDrive mpr.lib)

Compile usando MinGW-w64 - para Windows de 32 e 64 bits:

Como uma alternativa ao C, aqui está um tutorial simples sobre o C # na API:

  • Mapeando uma letra de unidade por programação:

    link

por 04.06.2017 / 09:09