У меня есть сценарий для отображения пользователей, которые недавно не входили в систему, в котором используется команда Get -ADUser с фильтром LastLoginTimeStamp.
На данный момент мы отключаем учетные записи, которые не входили в систему в течение 90 дней, но я хотел бы сделать еще один шаг (поскольку мы очень ограничены в лицензиях), чтобы учетные записи без назначенной лицензии были отключены через 30 дней. Если им уже назначена лицензия, нет особого смысла отключать их учетную запись до истечения срока действия лицензии.
Поскольку политика Microsoft гласит, что «любой пользователь с возможностью RDP должен иметь лицензию», мы находимся в положении, когда у нас есть пользователи, которые не используют RDP, которых мы хотели бы отключить и переместить в группу, которая не использует RDP. разрешить RDP, чтобы мы могли освободить лицензию для нового пользователя.
Я наткнулся на несколько ресурсов в Интернете, которые показывают, как можно создавать отчеты CSV, но я не могу найти ничего, что показало бы, как PowerShell может получить доступ к этой информации. Есть ли способ или мне придется создать сценарий Powershell для экспорта отчета о лицензии CSV, а затем еще один для сравнения содержимого этого CSV со списком пользователей, которые не вошли в систему в течение x дней.
Я ищу не кого-то, кто напишет для меня сценарий, а чтобы подтвердить, есть ли способ сделать это в Powershell.
Спасибо,
Разъем.
В большинстве случаев лицензирования удаленного рабочего стола / сервера терминалов, с которыми я работал, эта информация сохраняется для объекта пользователя в Active Directory. Таким образом, чтобы получить эту информацию, нужно знать либо правильный фильтр LDAP, либо свойства для запроса.
У меня есть отчет на основе JScript, который я запускаю, чтобы извлечь эту информацию, используя cscript.exe
, но принципы в Powershell должны быть такими же.
На старых серверах / доменах (<= 2003) эта информация хранилась в одном свойстве, terminalServer
; а в более новых (> 2003 г.) это распределено по трем свойствам (о которых я знаю), которые называются msTSManagingLS
, msTSLicenseVersion
и msTSExpireDate
. Очевидно, что, имея больше информации, легче получить ее из новых доменов (но, поскольку вы работаете с Powershell, это, вероятно, нормально).
Таким образом, если предположить, что версия Powershell и модуль AD поддерживает фильтры в стиле блока сценариев, следующее (хотя и немного неэффективное) должно вас приблизить:
Get-ADUser -Filter {(msTSManagingLS -like '*' -and msTSLicenseVersion -like '*') -or (terminalServer -like '*')} -Properties * | fl -Property Name,sAMAccountName,msTS*
Если вы используете более старую версию Powershell, вам может потребоваться создать фильтр более дружественным к LDAP способом. Может быть:
Get-ADUser -LDAPFilter '(|(&(msTSManagingLS=*)(msTSLicenseVersion=*))(terminalServer=*))' -Properties * | fl -Property Name,sAMAccountName,msTS*
Когда у вас есть соответствующие объекты AD в конвейере, вы можете вызывать для них обычный Powershell (например, Where-Object { $_.msTSExpireDate -lt [DateTime]::Today.AddDays(-30) } | Disable-Account
)
Обратите внимание, что вам нужно сделать намного больше работы чем я сделал выше, чтобы убедиться, что вы не отключите какие-либо разумные учетные записи (тем более, что это может сделать вас и / или других администраторов неспособными получить доступ к вашим собственным машинам для решения). Как минимум, я бы безусловно постарайтесь ограничить это пользователями в пределах определенного OU, например применяя действительные -SearchBase
и -SearchScope
параметры к вашему Get-ADUser
позвоните или проверьте в своем Where-Object
фильтр (например, использование Get-ADPrincipalGroupMembership
чтобы убедиться, что они не в Администраторы домена группа).
Также обратите внимание, что это работает только для серверов удаленных рабочих столов, на которых запущены полнофункциональные службы удаленных рабочих столов с сервером лицензирования удаленных рабочих столов. Вы не можете использовать это для проверки удаленных пользователей в режиме администратора с двумя подключениями.
Поскольку никто не знает вашей среды (например, какой терминальный сервер вы действительно используете, поскольку эта информация отсутствует, как она настроена), трудно предоставить сценарий, который подходит здесь. Итак, что вы, возможно, захотите создать, это сценарий powerhsell, который использовал вывод, сгенерированный PerUserCALReport.vbs (см. Вот & Вот). Сгенерированный здесь экспорт затем повторно импортируется в каталог через Импорт-CSV. Используйте здесь элемент foreach для проверки построчно и используйте Get-ADUser для получения последнего значения входа в систему. Вы можете удалить / добавить пользователя из группы или отключить его здесь. Это зависит от тебя.
Обратите внимание, что есть разница между LastLogon, LastLogonTimeStamp и LastLogonDate, как написано. Вот. Поэтому используйте тот, который подходит для вашей среды, иначе ваш скрипт не будет работать правильно!