Знаете ли вы, кто залогинен в ваши виртуальные машины? Сколько из этих учётных записей локальные и сколько доменные? Уверены ли вы, что знаете где именно в вашей виртуальной инфраструктуре определённый пользователь залогинен в данный момент? И наконец последний вопрос, хотите ли знать ответы на эти вопросы? Если ваш ответ «Да», эта статья вам будет очень полезна.
Get-VMLoggedOnUser
Функция Get-VMLoggedOnUser из моего PowerCLI Vi-Module модуля ответит на все эти вопросы. Просто передайте одну или несколько ВМ в функцию и всё.
Одна ВМ:
Для длительных операций предусмотрен индикатор в виде progress bar.
Системные учётные записи, такие как NETWORK SERVICE, SYSTEM, и т.д. или, например, сервисные учётные записи MSSQL* будут исключены из вывода функции.
Какие же ВМ поддерживаются?
Функция Get-VMLoggedOnUser поддерживает включенные Windows ВМ, основанные на ядре NT6 и старше. Все эти требования исходят из того, что функция взаимодействует с гостевой ОС. Windows XP/2003 Server не поддерживаются. Больше 15 лет минуло с момента их выхода, пора бы уже от них избавиться :)
Значит ли это, что вы должны отфильтровать эти ВМ перед тем как передать их в функцию? Конечно, нет! Get-VMLoggedOnUser «молча» пропустит все неподдерживаемые ВМ без какой-либо ошибки, если, конечно, вы не используете параметр -Verbose. Флаг -Verbose сообщит вам обо всех пропущенных ВМ, а также причину, по которой каждая из них была пропущена. Существуют 3 основные причины: ВМ не включена, гостевая ОС не запущена или не отвечает, ну и неподдерживаемая гостевая ОС.
PS C:\> Get-VM | Get-VMLoggedOnUser -Verbose
Параметры функции
Функция имеет всего-навсего 2 параметра и те необязательные. Флаг -ExcludeLocal вернёт вам только доменные учётные записи.
PS C:\> Get-VM | Get-VMLoggedOnUser -ExcludeLocal
Второй параметр -Username предназначен для поиска учётных записей. Он пытается найти все учётные записи, соответствующие критерию поиска.
Учётная запись, с которой запущена консоль PowerShell будет также исключена из вывода функции, так что, если вы планируете найти свою собственную учётную запись, запустите PowerShell с любой другой административной учётной записью.
PS C:\> runas /u:$Domain\$User powershell.exe
Поиск учётных записей - это regex поиск без учёта регистра (case insensitive regex), в нём используется -imatch оператор! Regex как таковой выходит за рамки данной статьи. Встроенная справка по функции содержит несколько более интересных примеров использования шаблонов поиска (regex expressions), чем приведённые в статье.
PS C:\> Get-Help Get-VMLoggedOnUser -Examples
Учтите, что параметры функции относятся к разным наборам параметров (Parameter Sets) и поэтому не могут быть использованы вместе.
Не забудьте просмотреть примеры и справку по функции.