Как разблокировать файл на сервере
Блокирует или разблокирует файл или папку, чтобы отклонить или восстановить право пользователя, чтобы извлечь элемент для изменения в другую рабочую область или записать ожидающие изменения в элемент из другой рабочей области.
Необходимые разрешения
Чтобы использовать команду 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 системы управления версиями доступны для извлечения и возврата другим пользователям.
Если вы администрируете общие сетевые папки Windows, скорее всего вы периодически сталкиваетесь с просьбами пользователей принудительно закрыть файлы, открытые (заблокированные) в сетевых папках другими пользователями. Обычно это связано с некорректной работой программы, неправильном завершении сессии пользователя или ситуациях, когда пользователь открыл файл и забыл закрыть его (ушел домой, в отпуск и т.д.). Во всех этих случаях файл в сетевой папке оказывается заблокированным, и другие пользователи не могут вносить в него изменения.
В этой статье мы покажем, как получить список открытых файлов на файловом сервере Windows, узнать какие пользователи их используют, и способы сброса файловых сессий для разблокировки открытых файлов.
Вывод списка открытых файлов в сетевой папке Windows
Список открытых по сети файлов в Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).
Запустите на файловом сервере консоль Computer Management (или подключитесь к нему консолью удаленно со своего компьютера) и перейдите в раздел System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов на сервере, открытых удаленно. В данном списке указан локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).
Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles. Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:
Openfiles /Query /fo csv |more
Вы можете вывести список открытых файлов на сервере удаленно. Например, чтобы вывести все открытые по сети файлы на сервере 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 /s mskfs01 /u corp\aivanova /id *
Get-SMBOpenFile: вывод списка открытых по сети файлов в PowerShell
В версии PowerShell в Windows Server 2012/Windows 8 появились командлеты для управления сетевыми файлами и папками на SMB сервере. Эти командлеты можно использовать чтобы удаленно закрыть открытые по сети файлы.
Список открытых файлов можно получить с помощью командлета Get-SMBOpenFile. Чтобы закрыть файл (сбросить подключение), используется Close-SmbOpenFile.
Для вывода полного списка открытых файлов на сервере, выполните команду:
Команда возвращает ID файла, ID сессии и полное имя файла.
Можно вывести список открытых файлов с именами пользователей и компьютеров (IP адресами):
Можно вывести все файлы, открытые определенным пользователем:
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
Как удаленно закрыть открытые 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 . В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.
С помощью 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 предотвратила запуск неопознанного приложения, которое может подвергнуть ваш компьютер риску
Если вы мой постоянный читатель, то помните что я уже сталкивался с ситуациями при которых я имел заблокированный, исполняемый файл exe. Вот два примера:
Вот так выглядит заблокированный файл, я для такой демонстрации заблокировал исполняемый файл chrome.exe запускающий браузер Google Chrome.
Как разблокировать файл в Windows 10
Существует минимум два метода позволяющих вам это сделать, первый, это самый простой из графического интерфейса, второй с использованием PowerShell. Я рассмотрю оба варианта. Щелкаете по заблокированному файлу правым кликом, переходите в его свойства и на вкладке "Общие" ставите птичку на против слова "Разблокировать".
Применяем настройку, в итоге у вас пропадет поле "Разблокировать", в результате чего файл станет как проверенный и заслуживающий доверия.
Снятие блокировки файла через PowerShell
У меня для разблокировки файла есть командлет Unblock-File. Давайте я разблокирую файл chrome.exe. Для этого запустите окно PowerShell от имени администратора и введите команду:
Unblock-File -Path "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"В параметре -Path указываете полный путь до файла, если в пути есть пробелы в имени ,то заключите его в кавычки.
Если вам нужно разблокировать много файлов, то можно воспользоваться вот такой конструкцией:
В данном примере будут разблокированы все файлы содержащиеся в конечной папке. А вот так можно разблокировать по нужным именам:
dir "C:\Program Files (x86)\Google\Chrome\Application\*chr*" | Unblock-FileТут будут применены меры к файлам в имени которых есть "chr".
Так же можно использовать и командлет 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
Читайте также: