Как проверить, используется ли файл другим процессом — Powershell
Я пытаюсь найти решение, которое проверяет, используется ли файл другим процессом. Я не хочу читать содержимое файла, как на 7-ГБ документе, это может занять некоторое время. В настоящее время я использую функцию, упомянутую ниже, которая не идеальна, так как script занимает около 5 — 10 минут, чтобы получить значение.
Любая помощь будет принята с благодарностью
SInce вы не хотите читать файл, я бы рекомендовал использовать такую утилиту, как Sysinternals Handle.exe, которая выплюнет все открытые дескрипторы для процесса. Вы можете скачать Handle.exe здесь:
Вы можете запустить Handle.exe без каких-либо аргументов, и он вернет все открытые дескрипторы файлов. Вы можете анализировать вывод, если это необходимо, или просто сопоставлять результат с полным пути к файлу.
Команда QUSER – отобразить сведения о вошедших в систему пользователях Windows
Команда QUSER — аналог команды QUERY USER . Отображает информацию о пользователях, вошедших в систему.
Формат командной строки:
QUERY USER [пользователь | имя сеанса | ID сеанса ] [/SERVER: сервер]
Параметры командной строки:
пользователь — Имя пользователя.
имя сеанса — Имя сеанса.
ID сеанса — Идентификатор сеанса.
/SERVER:сервер — Опрашиваемый сервер (по умолчанию — текущий).
Примеры использования команды QUSER:
QUSER /? — отобразить подсказку по использованию команды.
QUSER — при выполнении команды QUSER без параметров, отображаются сведения о всех пользователях, вошедших в систему на данный момент времени.
Пример отображаемой информации:
Пользователь user1 user2 |
Сеанс console rdp-tcp#0 |
ID 1 1 |
Статус Активно Активно |
Бездейств. . . |
Время входа 06.08.2015 6:07 06.08.2015 6:07 |
Отображаются имена пользователей, тип сеанса, идентификатор, статус, время бездействия и время входа в систему. В примере, пользователь user1 вошел в систему локально ( сеанс console , а пользователь user2 — удаленно (сеанс rdp-tcp#0 )
QUSER /server:win8e — отобразить информацию о пользователях, вошедших в систему на компьютере с именем win8e . Результат выполнения команды зависит от прав пользователя по отношению к удаленной системе и настроек брандмауэра. Настройки безопасности, принятые в Windows по умолчанию не позволяют получить информацию с помощью команды QUSER на удаленном компьютере.
QUSER /server:192.168.0.1 — отобразить информацию о пользователях, вошедших в систему на компьютере с IP-адресом 192.168.0.1
Как проверить, запущен ли скрипт PowerShell от имени администратора?
Если вам нужно запустить сценарий PowerShell с правами администратора, вы можете проверить, имеет ли текущий процесс powershell.exe повышенные права, прямо в вашем коде PS.
Следующий код PowerShell можно использовать для проверки того, работает ли текущий сценарий в режиме «Запуск от имени администратора»:
Сохраните код PowerShell в файле check_process_elevation.ps1 и запустите его в консоли без прав администратора:
Как видите, появилось сообщение, что у вас нет прав администратора, поэтому сценарий PowerShell остановлен.
Теперь запустите сценарий в сеансе PowerShell с повышенными привилегиями. Как видите, скрипт обнаружил, что этот сеанс PowerShell запускается от имени администратора.
Также вы можете запросить повышение прав прямо из сценария PowerShell. Для этого вместо строки:
используйте следующий код:
При запуске скрипта без прав администратора он будет повторно запущен в новом сеансе PowerShell с повышенными привилегиями, и вы увидите запрос на повышение прав UAC. Если вы примете его, ваш сценарий PS1 будет запущен от имени администратора. (Путь к текущему файлу сценария PowerShell передаётся с помощью переменной среды $PSCommandPath).
В PowerShell 4.0 или новее ещё проще проверить, работает ли ваш скрипт с правами администратора. Для этого используйте директиву -RunAsAdministrator.
Если скрипт не запускается под администратором, появится следующая ошибка:
Если вы запустите сценарий на компьютере с PowerShell v2, появится следующее сообщение об ошибке:
Для управления Active Directory вам может потребоваться другая задача: проверить, есть ли у текущего пользователя права администратора домена из сценария PowerShell. Используйте следующий код:
Powershell узнать кто залогинен на компьютере
Имея несколько ферм с терминальными серверами иногда нужно найти сессию пользователя на сервере. Конечно, можно перебирать руками каждый сервер но это не наш метод .
Для этого есть PowerShell, для которого мы напишем скрипт и он уже будет искать юзеров. Итак приступим.
Проверка наличия у пользователя прав администратора через PowerShell
Если по какой-то необходимости нужно проверить наличие у пользователя прав администраторов через PowerShell, то проще всего это сделать проверив его наличие в группе BUILTINАдминистраторы. Причина, по которой это самый простой, и наверное, правильный вариант проста — в случае использования других методов (доступ к файлуветке реестра и т. д.) требуется подтверждение повышения прав через UAC. А вот проверка наличия пользователя в группе как раз исполняется в фоновом режиме и не требует никакого взаимодействия от пользователя.
Windows: Powershell-скрипт для поиска папки с профилем пользователя по всем компам в домене.
Картина маслом — организация компов на 150, домен. Спустя год после увольнения сотрудника выясняется что у него на рабочем столе остался очень важный файлик и его нужно срочно найти. Профили пользователей не перемещаемые, хранятся на компах. Беда в том, что за давностью времен никто не помнит за каким компом сидел сотрудник. Под эту задачу ваш покорный слуга запилил нехитрый скрипт, который проверяет наличие папки с профилем пользователя с помощью скрытой шары доступной для администраторов (папка C$).
Import-Module activedirectory
$name_user = read-host «Введите логин пользователя»
$Comp_s = Get-ADComputer -Filter * -Properties *
ForEach ($name_comp in $Comp_s)
>
pause
В конторе не было компов на Windows XP, поэтому проверяется только наличие папки C:Users, для компов с XP нужно проверять C:Documents & Settings. Скрипт работает на powershell v5.1, если версия ниже желательно обновиться (Windows Server 2008 R2: Обновить версию Powershell.).
Импортируем модуль для работы с AD.
$name_user = read-host «Введите логин пользователя»
сохраняем введенное с клавиатуры имя пользователя в переменную name_user
$Comp_s = Get-ADComputer -Filter * -Properties *
сохраняем список всех компов в домене в переменную Comp_s
для каждого компа из переменной Comp_s проверить существование папки \C$Users, если существует — выводим имя компа.