0

Экспорт дат последнего входа в CSV (Office365+Powershell)

Скрипт, который получает список дат последнего входа в 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *