无需重新启动即可退出网络共享驱动器?

无需重新启动即可退出网络共享驱动器?

我有一个小脚本,在每个工作站上运行,运行 defrag 和 chkdsk,并将每个工作站临时连接到它们通常无法访问的网络共享。我用来连接它们的命令是:

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

是否有一个命令可以在不重新启动计算机的情况下将该用户从驱动器共享中注销?

工作站运行 Windows XP SP3

编辑:我用过:

net use \\server\sharename /delete

但命令返回“无法找到网络连接”。但是,我仍然可以导航到\\server\sharenameMyComputer 地址行并仍可完全访问它。

EDIT2:假设我已经阅读了网络使用的帮助文件;D

EDIT3:重启就够了吗?是的……但是注销共享用户更方便 =D。我知道我很难搞。

答案1

net use \\server\sharename /delete

编辑:为了使凭证被刷新:

net use \\server\IPC$ /delete

答案2

如果net use此处列出的命令不起作用,您可以重新启动,而不是重新启动工作站服务(我不确定该怎么做无需重启服务尽管):

  1. net use首先使用如上所述的适当命令(例如,net use * /del对于霰弹枪方法)。
  2. 控制面板 -> 管理工具 -> 服务
  3. 寻找工作站在列表中。
  4. 右键单击并选择重新开始

如果您为共享文件夹打开了任何资源管理器窗口或任何打开的文件,则可能必须关闭它们才能重新启动服务(如果重新启动似乎挂起,通常就是这个原因)。

或者,您也可以使用以下命令在命令行上重新启动服务:

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

计算机浏览器启动通常是必要的,因为停止工作站也停止了计算机浏览器。您将在第一个命令的输出中看到它是否确实如此。同样,可能需要关闭资源管理器窗口和打开的文件。


参考:https://social.technet.microsoft.com/Forums/windows/en-US/58494ea1-e3a0-49ab-be5c-1aa2b86f13c9/how-to-logout-from-shared-folder

答案3

net use \\server\sharename /delete

查看完整的 net use 命令这里

答案4

@rocketsarefast 和我发现了另一种清除网络凭证的方法。我已在此帖子中发布了我的答案:


我还发现了@rocketsarefast 的回答当有新的登录尝试时,Windows 将清除旧的网络凭据。

但是他的net use "\\10.0.0.5\c$" "badpassword" /user:"baduser"命令实在是太慢了,尤其是客户端需要等待服务器长达数秒的时间才能收到拒绝的响应,这非常糟糕且不方便。

在我的用例中,我能够使用 Win32 API 将网络共享映射\\Server\ShareS:\驱动器。它首先断开驱动器的连接,然后使用 Windows 网络登录对话框提示用户,以便用户能够注销并以其他用户身份登录。

以下是 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;
}

这里是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)

使用 MinGW-w64 进行编译 - 适用于 32 位和 64 位 Windows:

作为 C 的替代品,这里有一个关于 API 的简单 C# 教程:

相关内容