Как разблокировать файл на сервере

Обновлено: 06.07.2024

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

Необходимые разрешения

Чтобы использовать команду Lock , необходимо установить разрешение Блокировка для разрешения. Если разрешение на изменение разблокировки другого пользователя имеет значение Разрешить , необходимо удалить блокировку, удерживаемую другим пользователем, если у вас нет разрешения на запись в рабочую область этого пользователя. Дополнительные сведения см. в разделе ссылки на разрешения и группы.

Параметры

Аргумент

Argument

Описание

Определяет файл или папку для блокировки или разблокировки. Дополнительные сведения о том, как Team Foundation анализирует itemSpecs, чтобы определить, какие элементы находятся в области, см. в разделе Параметры командной строки.

Можно указать более одного аргумента itemspec .

Предоставленное пользователем значение для параметра /Workspace .

Предоставляет значение для параметра /Login . You can specify a username value as either DOMAIN<em>UserName или имя пользователя.

Параметр

Параметр

Описание

/Lock

Указывает тип блокировки или удаляет блокировку из элемента. Дополнительные сведения см. в разделе Основные сведения о типах блокировок. Параметры блокировки:

None
Удаляет блокировку элемента.

Возврат
Позволяет извлечь элемент и изменить его во всех рабочих областях, но не позволяет пользователям возвратить изменения в элемент за пределами указанного /Workspace , пока не будет явно снята блокировка возврата. Если указанный элемент заблокирован в любой другой рабочей области, операция блокировки завершается с ошибкой.

Оформление
Запрещает пользователям возврат или извлечение указанных элементов, пока блокировка не будет явно снята. Если пользователи заблокировали один из указанных элементов или если ожидающие изменения существуют для какого либо из элементов, операция блокировки завершается неудачно.

/Workspace

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

/login

указывает имя пользователя и пароль для проверки подлинности пользователя с Visual Studio Team Foundation Server.

/Collection

Указывает коллекцию проектов.

Комментарии

Можно использовать команду Lock, чтобы временно заморозить версию сервера системы управления версиями Team Foundation, чтобы можно было вернуть ожидающее изменение без разрешения конфликтов слияния. Если вы хотите безвозвратно запретить доступ к элементу на сервере системы управления версиями Team Foundation, вместо этого следует использовать команду разрешения .

Чтобы помочь вашим коллегам, уведомлять их при применении блокировки к элементу, объяснить, почему это делается, и оценить, когда вы планируете удалить блокировку, если это возможно.

Дополнительные сведения о том, как найти служебную программу командной строки tf , см. в разделе tf Command-Line Служебные команды.

Как заблокировать элемент

Можно заблокировать элемент с помощью команды LOCK или указать параметр lock во время Комиссии нескольких других команд служебной программы командной строки tf , которые включают:

Для добавления и ветвления блокировка размещается в пространстве имен, в котором будет создан новый элемент. Блокировки, размещенные с помощью Rename, применяются как к старым, так и к новым пространствам имен. Дополнительные сведения см. в разделе Блокировка и разблокировка папок или файлов.

Типы блокировок

В Team Foundation предусмотрены два типа блокировок: Возврат и Извлечение.

Блокировка возврата имеет меньшие ограничения, чем блокировка извлечения. При применении блокировки возврата пользователи могут продолжать выполнять локальные изменения элемента в других рабочих областях. Изменения не могут быть возвращены, пока вы явно не удалите блокировку возврата из рабочей области.

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

Дополнительные сведения о времени применения блокировки извлечения и применении блокировки возврата см. в разделе Основные сведения о типах блокировок.

Принцип работы блокировки

Если файл был извлечен при блокировке, его состояние изменится, чтобы оно содержало новый тип блокировки. Если файлы извлечены не были, в набор отложенных изменений рабочей области добавляется изменение "lock". В отличие от команды Checkout , Блокировка автоматически не делает файл редактируемым.

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

Разблокирование элемента

Заблокированный элемент можно разблокировать с помощью параметра None . Кроме того, при возврате ожидающих изменений в рабочей области Team Foundation автоматически разблокирует элемент.

Вы можете определить, какие файлы заблокированы на сервере системы управления версиями Team Foundation и заблокированы ли они с помощью команды Status.

Примеры

В следующем примере другие пользователи запрещают извлечение 314. cs.

В следующем примере другим пользователям запрещается возврат изменений в 1256. cs, но они позволяют им извлечь их в своих рабочих областях.

В следующем примере другие пользователи не отменяют ожидающие изменения в любых элементах src/Folder на сервере системы управления версиями Team Foundation.

В следующем примере снимается блокировка и все файлы в папке src/Team Foundation Server системы управления версиями доступны для извлечения и возврата другим пользователям.

date

27.07.2021

directory

Windows 10, Windows Server 2012 R2, Windows Server 2016

comments

комментариев 39

Если вы администрируете общие сетевые папки Windows, скорее всего вы периодически сталкиваетесь с просьбами пользователей принудительно закрыть файлы, открытые (заблокированные) в сетевых папках другими пользователями. Обычно это связано с некорректной работой программы, неправильном завершении сессии пользователя или ситуациях, когда пользователь открыл файл и забыл закрыть его (ушел домой, в отпуск и т.д.). Во всех этих случаях файл в сетевой папке оказывается заблокированным, и другие пользователи не могут вносить в него изменения.

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

Вывод списка открытых файлов в сетевой папке Windows

Список открытых по сети файлов в Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).

Запустите на файловом сервере консоль Computer Management (или подключитесь к нему консолью удаленно со своего компьютера) и перейдите в раздел System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов на сервере, открытых удаленно. В данном списке указан локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).

Открыты файлы на файловом сервере Windows

Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles. Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:

Openfiles /Query /fo csv |more

Openfiles /Query

При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия. Вы можете управлять открытыми файлами с помощью идентификаторов этих сессий.

Вы можете вывести список открытых файлов на сервере удаленно. Например, чтобы вывести все открытые по сети файлы на сервере mskfs01, выполните:

Openfiles /Query /s mskfs01 /fo csv

Команда Openfiles позволяет также вывести список локально открытых файлов. Для этого на сервере нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого команда Openfiles будет отображать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).

Определяем пользователя, который открыл файл в сетевой папке с помощью Openfiles

Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i "cons.adm"

Ключ /i используется, чтобы выполнялся регистронезависимый поиск.

Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i "farm"| find /i "xlsx"

Можно, конечно найти открытый файл и в графической консоли Computer Management, но это менее удобно (в консоли нет возможности поиска).

Как принудительно закрыть открытый файл в Windows?

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open Files и в контекстном меню выбрать пункт “Close Open File”.

Закрыть открытые файлы в сетевой папке

Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles. Как мы уже говорили, она возвращает ID сессии открытого файла. Вы можете принудительно закрыть файл и сбросить подключение пользователя по ID SMB сессии. Сначала нужно определить ID сессии открытого файла:

Openfiles /Query /s mskfs01 /fo csv | find /i "farm"| find /i ".xlsx"

Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:

Openfiles /Disconnect /s mskfs01 /ID 67109098

Openfiles Disconnect - отключение файла по id сессии


Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:
openfiles /disconnect /s mskfs01 /u corp\aivanova /id *

Обратите внимание, что принудительное закрытие файла, открытого клиентом на SMB сервере, вызывает потерю несохраненных данных. Поэтому команду openfiles /disconnect и командлет Close-SMBOpenFile (рассматривается ниже) нужно использовать с осторожностью.

Get-SMBOpenFile: вывод списка открытых по сети файлов в PowerShell

В версии PowerShell в Windows Server 2012/Windows 8 появились командлеты для управления сетевыми файлами и папками на SMB сервере. Эти командлеты можно использовать чтобы удаленно закрыть открытые по сети файлы.

Список открытых файлов можно получить с помощью командлета Get-SMBOpenFile. Чтобы закрыть файл (сбросить подключение), используется Close-SmbOpenFile.

Для вывода полного списка открытых файлов на сервере, выполните команду:

Get-SMBOpenFile вывод списка открытых файлов на SMB сервере с помощью powershell

Команда возвращает ID файла, ID сессии и полное имя файла.

Можно вывести список открытых файлов с именами пользователей и компьютеров (IP адресами):

poweshell вывод список пользователей, которые открыли файлы в сетевой папке windows

Можно вывести все файлы, открытые определенным пользователем:

Get-SMBOpenFile –ClientUserName "corp\aaivanov" |select ClientComputerName,Path

или с определенного компьютера (сервера):

Get-SMBOpenFile –ClientComputerName 192.168.12.170| select ClientUserName,Path

Можно вывести список открытых файлов по шаблону. Например, все открытые по сети exe файлы:

или файлы с определенным именем:

Чтобы закрыть файл используется командлет Close-SmbOpenFile . Закрыть файл можно по ID:

Close-SmbOpenFile -FileId 4123426323239

Но обычно удобнее закрыть файл по имени:

Get-SmbOpenFile | where | Close-SmbOpenFile -Force

С помощью Out-GridView можно сделать простую графическую форму для поиска и закрытия файлов. Следующий скрипт выведет список открытых файлов. Администратор должен с помощью фильтров в таблице Out-GridView найти, выделить нужные файлы и нажать ОК. В результате выбранные файлы будут принудительно закрыты.

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru –title “Select Open Files”|Close-SmbOpenFile -Confirm:$false -Verbose

Get-SmbOpenFile вместе с out-gridview - powershell скрипт с графическим интерефейсом по выбору и принудительному закрыттию заблокированных (открытых) файлов в windows

Как удаленно закрыть открытые SMB файлы с помощью PowerShell?

Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:

$sessn = New-CIMSession –Computername mskfs01

Также вы можете подключаться к удаленному серверам для запуска команд через командлеты PSRemoting: Enter-PSSession или Invoke-Command .

Следующая команда найдет SMB сессию для открытого файла *pubs.docx и завершит ее.

Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn

Подтвердите закрытие файла, нажав Y . В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.

Get-SMBOpenFile - удаленное управление открытых файлов

Чтобы убрать подтверждение закрытия файла на сервере, используйте ключ –Force .

С помощью PowerShell вы можете закрыть и разблокировать на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:

Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn

Что такое заблокированный файл

Диспетчер вложений Windows использует интерфейс прикладного программирования (API) IAttachmentExecute, чтобы найти тип файла, найти ассоциацию файла. Когда одно из этих приложений сохраняет загруженный файл на диск, отформатированный в NTFS, он обновляет метаданные для файла с зоны, из которой он был загружен. Метаданные сохраняются как

  • Тип программы, которую вы используете.
  • Тип файла, который вы загружаете или пытаетесь открыть
  • Параметры безопасности зоны веб-содержимого, из которой вы загружаете файл (Интернет, Местная интрасеть, Надежные узлы, Опасные сайты)

Интернет, Местная интрасеть, Надежные узлы, Опасные сайты

Диспетчер вложений классифицирует файлы, которые вы получаете или загружаете, в зависимости от типа файла и расширения имени файла. Диспетчер вложений классифицирует типы файлов как группы с высоким, средним и низким уровнем риска.

  • Высокий риск - если вложение находится в списке типов файлов с высоким риском и находится в зоне ограниченного доступа, Windows блокирует доступ пользователя к файлу. Если файл находится в зоне Интернета, Windows предлагает пользователю предупреждение системы безопасности Windows: "Windows обнаружила, что этот файл потенциально опасен. Чтобы защитить ваш компьютер, Windows заблокировала доступ к этому файлу."
  • Умеренный риск - если вложение находится в списке типов файлов с умеренным риском и относится к зоне с ограниченным доступом или из Интернета, Windows выдает пользователю предупреждение: "Не удалось проверить издателя. Вы уверены, что хотите запустить это программное обеспечение?".
  • Низкий уровень риска. Если вложение находится в списке типов файлов с низким уровнем риска, Windows не будет запрашивать пользователя перед доступом к файлу, независимо от информации о зоне файла.

Поэтому если простым языком, то заблокированный файл - это файл который попал под правила проверки диспетчером вложений и был помечен, как не заслуживающий доверия в виду того, что он был получен из недоверенного источника.

Вот вам пример оповещения от диспетчера вложений:

Система Windows защитила ваш компьютер. Фильтр Windows SmartScreen предотвратила запуск неопознанного приложения, которое может подвергнуть ваш компьютер риску

Система Windows защитила ваш компьютер. Фильтр Windows SmartScreen предотвратила запуск неопознанного приложения, которое может подвергнуть ваш компьютер риску


Если вы мой постоянный читатель, то помните что я уже сталкивался с ситуациями при которых я имел заблокированный, исполняемый файл exe. Вот два примера:

Вот так выглядит заблокированный файл, я для такой демонстрации заблокировал исполняемый файл chrome.exe запускающий браузер Google Chrome.

заблокированный файл в Windows 10

Как разблокировать файл в Windows 10

Существует минимум два метода позволяющих вам это сделать, первый, это самый простой из графического интерфейса, второй с использованием PowerShell. Я рассмотрю оба варианта. Щелкаете по заблокированному файлу правым кликом, переходите в его свойства и на вкладке "Общие" ставите птичку на против слова "Разблокировать".

Как разблокировать файл в Windows 10


Применяем настройку, в итоге у вас пропадет поле "Разблокировать", в результате чего файл станет как проверенный и заслуживающий доверия.

успешное разблокирование файла

Снятие блокировки файла через PowerShell

У меня для разблокировки файла есть командлет Unblock-File. Давайте я разблокирую файл chrome.exe. Для этого запустите окно PowerShell от имени администратора и введите команду:

Unblock-File -Path "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

В параметре -Path указываете полный путь до файла, если в пути есть пробелы в имени ,то заключите его в кавычки.

Снятие блокировки файла через PowerShell


Если вам нужно разблокировать много файлов, то можно воспользоваться вот такой конструкцией:

dir "C:\Program Files (x86)\Google\Chrome\Application\*" | Unblock-File

В данном примере будут разблокированы все файлы содержащиеся в конечной папке. А вот так можно разблокировать по нужным именам:

dir "C:\Program Files (x86)\Google\Chrome\Application\*chr*" | Unblock-File

Тут будут применены меры к файлам в имени которых есть "chr".

Как разблокировать файл в Windows 10-06

Так же можно использовать и командлет get-childitem, вот пример:

get-childitem "C:\Program Files (x86)\Google\Chrome\Application\" | unblock-file

Как заблокировать файл в Windows 10

Если вы хотите сами заблокировать нужный файл, то вы можете это сделать через PowerShell. Вам нужно открыть PowerShell, перейти в расположение с файлом и выполнить код:

Set-Content chrome.exe -Stream "Zone.Identifier" -Value $data

В первой строке вам нужно подставить свой путь, в последней поменять имя на ваш файл.

Этот файл получен с другого компьютера и, возможно, был заблокирован с целью защиты компьютера

Осторожно: Этот файл получен с другого компьютера и, возможно,

был заблокирован с целью защиты компьютера.

ВООБЩЕ, отключить блокировку файлов в системе?!


Причина всему неправильная работа системы с NTFS.

И рекомендации которых много в интернете:

Изменить это можно в Панели управления -> Свойства обозревателя -> Безопасность -> Другой -> Запуск программ и небезопасных файлов -> Включить.

Конфигурация пользователя -> Политики -> Административные шаблоны -> Компоненты Windows -> Диспетчер вложений


Немного теории взятой у автора необходимой нам утилиты:

Файловая система NTFS позволяет приложениям создавать дополнительные информационные потоки данных. По умолчанию, все данные хранятся в основном безымянном потоке данных файла, но синтаксис «файл:поток» позволяет выполнять чтение и запись в дополнительные потоки. Доступ к дополнительным потокам предусмотрен не во всех приложениях.

В NT не предусмотрены средства, позволяющие узнать перечень файлов NTFS с ассоциированными потоками. Программа Streams анализирует указанные вами файлы и каталоги (у каталогов могут быть дополнительные потоки данных) и сообщает имена и размеры всех именованных потоков, встречающихся в этих файлах. Она основывается на недокументированной собственной функции извлечения данных о файловых потоках.

Итак, разберемся, более простым языком.

Файловая система может создавать несколько потоков при работе с файлами. Если файл правили на нескольких ПК то и потоки разные и все записываются в глубокий на уровень файла. Чего-то там на уровне файловой системы. Даже файлы создание самим пользователем и никогда пределы ПК не покидавшие могут иметь несколько потоков данных.

И ЭТО ОБНОВЛЕНИЕ ДЛЯ ОС ПЕРЕСТАЛО ПОНИМАТЬ ТАКИЕ ПОТОКИ И ВОСПРИНЯЛО ИЗ КАК ЧУЖИЕ И ЗАБЛОКИРОВАЛО ФАЙЛ!

Решение.

НЕОБХОДИМО УДАЛИТЬ ЛИШНИЕ ПОТОКИ, КОТОРЫЕ СТАЛИ ЧУЖИМИ.

Sysinternals
Автор: Марк Руссинович (Mark Russinovich)
Утилита Streams 1.56

Скачиваем архив, и распаковываем куда-то поудобнее. В моем случае C:/streams.exe

Запускаем командную строку cmd и переходим в корень C:/

Синтаксис: streams [-s] [-d] <файл или каталог>

-s Рекурсивный обход вложенных каталогов.
-d Удаление потоков.


И о чудо, пометки пропали, файлики открываются без проблем.

Вот так вот достаточно просто решается проблема созданная на пустом месте Майкрософтом. Ожидаем следующих багов.

UPD. 08/06/2015 21:17:05

Но, не бывает все так просто.


Необходимо включить пункт:

Это поможет при получении новых файлов.

Приятный бонус и от офисного пакета. Если используете майкрософтовский outlook.

Документы могут не открываться именно из-за их настроек


Снять галочки с защищенного просмотра.


6 Responses

Читайте также: