Скрипт, который получает список дат последнего входа в Office 365 через Powershell.
У данного скрипта доступно 3 параметра
- Office365Username — Обязательный — Учётная запись администратора организации
- Office365Password — Обязательный — Пароль учётной записи администратора
- UserIDFile — Опциональный — Путь к файлу с именем, где хранится список пользователей, для которых необходимо узнать дату последнего входа. Разделитель — новая строка
Чтобы запустить скрипт, необходимо создать файл с расширением .ps1, и туда вставить код, расположенный ниже. Команда для запуска выглядит таким образом:
.\<имя_скрипта>.ps1 -Office365Username admin@xxxxxx.onmicrosoft.com -Office365Password Password123 -InputFile c:\Files\InputFile.txt
ПРИМЕЧАНИЕ: Если не указать файл с именами пользователя, скрипт вернёт всех пользователей в организации. Не применимо к тем организациям, в которых более 3000 пользователей
Автор: Alan Byrne
#Назначаем параметры Param( [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] [string] $Office365Username, [Parameter(Position=1, Mandatory=$true, ValueFromPipeline=$true)] [string] $Office365Password, [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] [string] $UserIDFile ) #Переменные $OutputFile = "LastLogonDate.csv" #В процессе экспорта будет создан данный CSV файл #Основная функция Function Main { #Закрываем активные сессии Get-PSSession | Remove-PSSession #Вызываем ConnectTo-ExchangeOnline с нашими учётными данными ConnectTo-ExchangeOnline -Office365AdminUsername $Office365Username -Office365AdminPassword $Office365Password #Подготавливаем параметры нашего CSV Out-File -FilePath $OutputFile -InputObject "UserPrincipalName,LastLogonDate" -Encoding UTF8 #Проверяем есть ли подготовленный список пользователей if ($userIDFile -ne "") { #Список есть, используем его $objUsers = import-csv -Header "UserPrincipalName" $UserIDFile } else { #Списка нет, получаем всех пользователей в организации $objUsers = get-mailbox -ResultSize Unlimited | select UserPrincipalName } #Перебираем всех пользователей Foreach ($objUser in $objUsers) { #Получаем LastLogonTime $objUserMailbox = get-mailboxstatistics -Identity $($objUser.UserPrincipalName) | Select LastLogonTime #Подготавливаем переменную UserPrincipalName $strUserPrincipalName = $objUser.UserPrincipalName #Пользователи, которые никогда не входили, не имеют даты входа. Проверяем, есть ли такие if ($objUserMailbox.LastLogonTime -eq $null) { #Никогда не входили $strLastLogonTime = "Never Logged In" } else { #Входили, устанавливаем дату входа $strLastLogonTime = $objUserMailbox.LastLogonTime } #Для отладки раскоментируйте следующую строку: #write-host "$strUserPrincipalName : $strLastLogonTime" #Подготавливаем строку для записи в CSV $strUserDetails = "$strUserPrincipalName,$strLastLogonTime" #Записываем Out-File -FilePath $OutputFile -InputObject $strUserDetails -Encoding UTF8 -append } #Закрываем сессию Get-PSSession | Remove-PSSession } ############################################################################### # # Функция ConnectTo-ExchangeOnline # ############################################################################### function ConnectTo-ExchangeOnline { Param( [Parameter( Mandatory=$true, Position=0)] [String]$Office365AdminUsername, [Parameter( Mandatory=$true, Position=1)] [String]$Office365AdminPassword ) #Шифруем пароль для передачи в Office365 $SecureOffice365Password = ConvertTo-SecureString -AsPlainText $Office365AdminPassword -Force #Создаём credentials object $Office365Credentials = New-Object System.Management.Automation.PSCredential $Office365AdminUsername, $SecureOffice365Password #Создаём удалённую сессию Powershell $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $Office365credentials -Authentication Basic –AllowRedirection #Импортируем сессию Import-PSSession $Session -AllowClobber | Out-Null } # Запускаем скрипт . Main