Предложение Тоби верно для сообщения об ошибке.Если вы хотите вывести сеанс ID , вы можете выполнить следующее:
$userName = 'username'
$State = 'Disc'
$sessions = (quser /server:localhost).TrimStart() -replace "\s{2,}",","
$sessionIDs = $sessions | ForEach-Object {
$SessionProperties = $_ -split ","
if ($SessionProperties[0] -eq $userName -and $SessionProperties[-3] -eq $state -and $SessionProperties[-2] -match "\+") {
$SessionProperties[-4]
}
}
$sessionIDs
Метод TrimStart()
удаляет начальный пробел / отступ из вывода quser.
Оператор -replace
выполняет некоторое форматирование.Он заменяет последовательные пробелы запятыми.Это просто самодельный разделитель, обеспечивающий лучший доступ к данным.
Я выбрал циклический переход по $sessions
, поскольку в некоторых случаях один и тот же пользователь может иметь несколько отключенных сеансов.Этого никогда не должно быть, но Windows будет Windows.
$SessionProperties
разбивает каждую строку $sessions
на массив.Каждая частичная строка между запятыми является элементом в массиве.Для доступа к элементам массива я использую различные индексные числа.[0]
- это первый элемент, который всегда должен быть именем пользователя.Отрицательные индексы, такие как [-4]
, считаются в обратном направлении от конца массива.[-1]
представляет последний индекс массива, тогда как [-2]
будет вторым по последнему элементу и так далее.Причина, по которой я выбрал отрицательные индексы, заключается в том, что иногда SESSIONNAME в выводе запроса содержит пробелы, в результате чего оператор -split
создает массив с одним элементом меньше.Это позволит вам в будущем изменить переменную $State
на другую, независимо от того, содержит ли SESSIONNAME какие-либо полезные данные.
Оператор -match
совпадает с символом +
,+
продолжается количество дней.Поскольку вы ищете как минимум один день простоя, это упрощает сопоставление с регулярным выражением.Это необходимо изменить, если вы когда-нибудь захотите сопоставить в простое меньше, чем за день.
Для получения информации о -match
см. Для получения информации о -split
см. about_Split
Для получения информации о -replace
и -match
см. about_Cararison_Operators
Для операторов в целом вы можете просмотреть about_Operators