Я использую Get-Process для запросов вошедших в систему пользователей удаленных машин.Это работает очень хорошо, но когда пользователь не вошел в систему, запрос возвращает мое собственное имя пользователя, как вошедшее в систему. Я просто хотел бы либо не выводить, когда пользователь не вошел в систему, или просто "Нет пользователя, вошедшего в системуon "появится в выходных данных.
Я пробовал маршрут WMI с:
Get-WmiObject -Class win32_LoggedOnUser -ComputerName $Comp
Но это возвращает слишком много выходных данных и очень трудно отфильтровать.
Я также попробовал маршрут CIM с:
(Get-CimInstance -ClassName CIM_ComputerSystem -ComputerName $Comp).UserName
CIM работает очень хорошо и дает желаемый вывод, но проблема в том, что большинство машин в моей среде не поддерживаютПротокол WS-Management, и поэтому они выдают ошибку при запросе.
Маршрут Get-Process
работает лучше всего и работает быстро.Я просто не могу понять, как отфильтровать вывод, чтобы не показывать мое имя пользователя для удаленных компьютеров, на которых никто не вошел локально.
Invoke-Command -Computername $Comp -Scriptblock {
Get-Process -IncludeUserName | Select-Object UserName | Where-Object { $_.UserName -ne $null -and $_.UserName.StartsWith("DomainName") } | Sort-Object SessionId -Unique
}
Когда пользователь вошел в систему локально на удаленной машине, его имя пользователяотображается на выходе.Когда пользователь не вошел в систему локально на удаленной машине, мое имя пользователя отображается в выходных данных.
Я бы хотел, чтобы либо ничего не отображалось, либо отображалось сообщение «Ни один пользователь не вошел в систему», когда ни один пользователь не вошел в систему.локально на удаленной машине.