Defragとchkdskを実行し、各ワークステーションを通常はアクセスできないネットワーク共有に一時的に接続する、各ワークステーションで実行される小さなスクリプトがあります。それらに接続するために使用するコマンドは次のとおりです。
Net Use \\server\sharename [password] /USER:domain\username P:No
コンピュータを再起動せずにそのユーザーをドライブ共有からログアウトするコマンドはありますか?
ワークステーションはWindowsで実行されますXP SP3
編集:私は使用しました:
Net Use \\server\sharename /delete
ただし、コマンドは「ネットワーク接続が見つかりません」を返します。ただし、MyComputerアドレス行の\\server\sharename
に移動して、フルアクセスすることはできます。
EDIT2:NetUseのヘルプファイルを読んだと仮定します; D
EDIT3:再起動で十分でしょうか?はい...ただし、= Dではなく共有からユーザーをログアウトする方が便利です。私は難しいことを知っています。
Net Use \\server\sharename /delete
編集:資格情報をフラッシュさせるには:
Net Use \\server\IPC$ /delete
ここにリストされているNet Use
コマンドでうまくいかない場合は、再起動する代わりに、Workstationサービスを再起動できます(これを行う方法がわかりません- サービスの再起動なし ただし):
Net Use
コマンドを使用します(例:ショットガンアプローチの場合はNet Use * /del
)。共有フォルダー用にエクスプローラーウィンドウを開いている場合、または開いているファイルがある場合は、サービスを再起動するためにそれらを閉じる必要がある場合があります(再起動がハングしているように見える場合は、通常これが理由です)。
または、コマンドラインで次のコマンドを使用してサービスを再起動することもできます。
net stop Workstation
net start Workstation
net start "Computer Browser"
Computer Browserstartは通常必要です。停止Workstationも停止しますComputer Browser 。最初のコマンドからの出力でそれが行われるかどうかがわかります。ここでも、エクスプローラウィンドウを閉じてファイルを開く必要がある場合があります。
Net Use \\server\sharename /delete
完全なNetUseコマンドを参照してください ここ 。
@rocketsarefastと私は、ネットワーク資格情報をクリアする別の方法を発見しました。私はこのスレッドに私の答えを投稿しました:
Win7でネットワークの場所のログイン資格情報を削除するにはどうすればよいですか?:
また、 @ rocketsarefastの回答 から、新しいログインが試行されると、Windowsが古いネットワーク資格情報をクリアすることも発見しました。
しかし、彼のNet Use "\\10.0.0.5\c$" "badpassword" /user:"baduser"
コマンドは遅すぎます。特に、サーバーが拒否で応答するまでクライアントが最大数秒待たなければならない場合は、ひどく不便です。
私のユースケースでは、Win32APIを使用してネットワーク共有をマッピングすることができました\\Server\Share
からS:\
ドライブ。最初にドライブを切断し、次に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#チュートリアルを次に示します。
プログラムによるドライブ文字のマッピング: