Назад | Перейти на главную страницу

Удаленное закрытие сеансов с общей папкой

Введение:

У меня есть сценарий, который копирует некоторые данные с локального сервера (сервер A) на другой сервер (сервер B) через путь UNC, общий ресурс на сервере B был создан для внешнего жесткого диска, который меняется каждый день после внешнего Жесткий диск заменен, новый жесткий диск монтируется с помощью команды mountvol, присвоенная буква такая же, но, как вы, возможно, уже знаете, имя тома для каждого жесткого диска отличается.

Проблема, как я понял (пошагово):

Если я открываю проводник на сервере B и перехожу по пути UNC, что означает, что на сервере A есть сеанс с сервера B для моего (пользователя X), в cmd я выполняю, используя другую учетную запись (пользователь Y), например:

dir \\path"

и я вижу файлы, так что на данный момент есть 2 сеанса с одного компьютера и разных пользователей.

Любопытство: сеанс для пользователя Y будет оставаться до тех пор, пока в командной строке вы не напишете другую команду, или окно cmd не потеряет фокус - вместо закрытия сеанса сразу после завершения команды dir.

Из любопытства выше, в этом случае 2-й сеанс для пользователя Y можно игнорировать, это оставляет нам один сеанс на сервере A для пользователя X

Я перехожу к серверу B, размонтирую жесткий диск с помощью mountvol (это также можно сделать в Computer Management), меняю местами жесткий диск и затем монтирую новый жесткий диск.

Я возвращаюсь на сервер A, в окне cmd снова выполняю команду DIR с любой учетной записью пользователя X или Y и получаю:

The system cannot find the file specified.

Если я перейду в открытое окно проводника и обновлю окно, файлы также не появятся.

Возможное решение -> Мне нужна ваша помощь здесь :)

Поскольку сценарий (пакетный сценарий) является автоматическим, и я не хочу проверять, есть ли какой-либо сеанс зависания с сервера B на сервере A, я хотел бы принудительно закрыть все сеансы зависания для данного общего ресурса на сервере A, НО Я хотел бы сделать это из моего скрипта на сервере B, "net sessions (ion (s))" предназначен для локальных целей.

Если у вас есть другие предложения, под этим я подразумеваю другое возможное решение, дайте мне знать. Спасибо.

Техническая информация:

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

Примечания: Поправьте меня, если я ошибаюсь, но я думаю, что:

  1. Обновление представления в окне проводника для UNC-пути не работает, поскольку имя тома отличается, размонтирование и повторное подключение (тот же жесткий диск) заставляет обновление работать нормально. Возможно, это функция безопасности? или это ошибка? или я что-то упускаю?

  2. После запуска dir для пути unc и получения списка файлов следует сразу закрыть сеанс, поскольку с ним больше нет "обработки".

  3. После запуска dir для пути unc сеансы остаются открытыми, но когда вы щелкаете по другим окнам (окно cmd теряет фокус), сеанс исчезает.

Это отличный пример того, как PowerShell может намного превосходить некоторые собственные инструменты пакетного программирования. Вы можете использовать Новый-PSDrive командлет для сопоставления диска на сервере B. Диск будет сохраняться только для этого конкретного сеанса PowerShell, поэтому, если вы выполните новый сценарий и / или сеанс PowerShell, сопоставление диска больше не будет кэшироваться. Вы также можете просто удалить диск и воссоздать его с помощью Удалить-PSDrive в зависимости от вашего варианта использования.