Рейтинг:0

Временно предотвратить блокировку файла SMB при использовании — Windows

флаг cn

у меня есть файл \сервер\общий ресурс\myApp\app.exe что горстка людей бегает прямо от акции. Мне нужно время от времени обновлять этот файл, но обычно он заблокирован из-за открытых сеансов SMB.

Моя обычная процедура для подобных заблокированных файлов SMB заключается в закрытии файлов и сеансов, блокирующих их, например:

$openAppFiles = Get-SmbOpenFile | Где Path - как 'D:\Shares\myApp\*' 
$appSessions = $openAppFiles | Выберите SessionID - Уникальный

Close-SmbOpenFile -FileID $openAppFiles.FileID -Force
Close-SmbSession -SessionID $appSessions.SessionID -Force

Извлечь-архивировать $newZip -Destination 'D:\Shares\myApp\' -Force

Но в последнее время я столкнулся с проблемами, когда клиент может повторно подключиться и заблокировать один или несколько файлов, которые я обновляю, в этом крошечном окне. Я могу проверить, пытаясь просто переименовать файл, например:

Переименовать элемент .\app.exe .\app.exe.bak

[Ошибка] Rename-Item: процесс не может получить доступ к файлу, поскольку он используется другим процессом.

Есть ли способ временно заблокировать клиентам доступ к этим файлам?

Я подумал о том, чтобы временно отключить общий ресурс, но мне придется сделать это в нерабочее время. Я также могу просто перезапускать его, пока он не заработает, но это также не обязательно решит проблему. Какие еще варианты можно попробовать?

флаг in
Это исполняемый файл, который вы можете изменить, например. пусть разработчик изменит его определенным образом? Если да, измените его так, чтобы он запускался из SMB, сначала копировал себя на локальный временный путь, а затем запускал скопированную версию. Затем первый процесс может завершиться и оставить исполняемый файл незаблокированным.
Cpt.Whale avatar
флаг cn
@ Роберт, к сожалению, не с обоих концов. Я не могу изменить само «приложение», и есть еще одна часть программного обеспечения, которое выполняет «приложение», которое я также не могу изменить. Сеансы smb даже не нужны после запуска приложения, но похоже, что клиенты Windows все равно будут восстанавливать их, пока процесс запущен...
Рейтинг:1
флаг us

Вы можете попробовать добавить Запретить всем запись в ACL общего ресурса:

Block-SmbShareAccess -Name AppShare -AccountName Everyone -Force

Затем продолжайте отключать подключенных пользователей, как вы это делаете в своем скрипте.

После обновления приложения удалите Запретить всем запись из ACL:

Unblock-SmbShareAccess -Name AppShare -AccountName Everyone -Force

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.