web-dev-qa-db-ja.com

共有フォルダセッションをリモートで閉じる

はじめに:

UNCパスを介してローカルサーバー(サーバーA)から別のサーバー(サーバーB)にデータをコピーするスクリプトがあります。サーバーBの共有は、外部ハードディスクの後に毎日変更される外部ハードディスク用に作成されました。 HDDが交換されます新しいHDDはmountvolコマンドを使用してマウントされ、割り当てられた文字は同じですが、すでにご存知かもしれませんが、各HDDのボリューム名は異なります。

私がそれを得たときの問題(ステップバイステップ):

サーバーBでエクスプローラーを開いてUNCパスに移動すると、サーバーAにサーバーBからのセッション(ユーザーX)があり、コマンドで別のアカウント(ユーザーY)を使用して実行します。例:

dir \\path"

ファイルが表示されるので、この時点で、同じコンピューターと異なるユーザーからの2つのセッションがあります。

好奇心:ユーザーYのセッションは、コマンドラインで別のコマンドを作成するか、コマンドウィンドウがフォーカスを失うまで、dirコマンドが終了した直後にセッションを閉じる代わりに留まります。

上記の好奇心により、この場合、ユーザーYの2番目のセッションは無視できます。これにより、ユーザーXのサーバーAに1つのセッションが残ります。

サーバーBに移動し、mountvolを使用してHDDをアンマウントし(コンピューターの管理でも実行できます)、HDDを交換してから、新しいHDDをマウントします。

サーバーAに戻り、cmdウィンドウで、任意のアカウントユーザーXまたはYを使用してDIRコマンドを再度実行すると、次のようになります。

The system cannot find the file specified.

開いているエクスプローラーウィンドウに移動してウィンドウを更新すると、ファイルも表示されません。

  • インターネットで、サーバーBでExplorerプロセスを再起動すると、共有ファイルが再び表示されることがわかりました。つまり、サーバーAのセッション(すべてのセッション?)を削除します。別のトリックは、サーバーBのセッションを削除することでした。

可能な解決策->ここであなたの助けが欲しいです:)

スクリプト(バッチスクリプト)は自動であり、サーバーAのサーバーBからハングしているセッションがあるかどうかを確認したくないので、サーバーAの特定の共有のすべてのハングしているセッションを強制的に閉じたいと思いますがサーバーBのスクリプトから実行したいのですが、「net sess(ion(s))」はローカル用です。

他に何か提案があれば、これは別の可能な解決策を意味します、私に知らせてください。ありがとうございました。

技術情報:

Server A: Windows Server 2008 R2 Enterprise SP1
Server B: Windows Server 2003 Enterprise SP2

注:間違っている場合は訂正してください。ただし、次のように思います。

  1. ボリューム名が異なるため、エクスプローラーウィンドウのビューの更新は機能しません。ボリューム名をアンマウントして再度マウントすると(同じHDD)、更新が正常に機能します。これはおそらくセキュリティ機能ですか?それともこれはバグですか?または私は何かが欠けていますか?

  2. Uncパスに対してdirを実行し、ファイルのリストを取得した後は、「処理」が行われていないため、セッションをすぐに閉じる必要があります。

  3. Uncパスのdirを実行した後、セッションは開いたままになりますが、別のウィンドウをクリックすると(cmdウィンドウがフォーカスを失います)、セッションは表示されなくなります。

4

これは、PowerShellがいくつかのネイティブバッチスクリプトツールよりもはるかに優れていることを示す優れた例です。 New-PSDrive コマンドレットを使用して、サーバーBにドライブをマップできます。ドライブはこの特定のPowerShellセッションでのみ存続するため、新しいスクリプトやPowerShellセッションを実行すると、ドライブのマッピングは行われません。より長くキャッシュされます。ユースケースに応じて、ドライブを削除して Remove-PSDrive で再作成することもできます。

1
user62491