Zaleca się, aby nie zmuszać użytkowników do zmiany hasła zgodnie z harmonogramem, chyba że istnieją dowody na naruszenie bezpieczeństwa. Czasami jednak chcesz sprawdzić, kiedy użytkownicy ostatnio zmieniali swoje hasła. W tym artykule dowiesz się, jak wyeksportować datę i godzinę ostatniej zmiany hasła użytkowników Microsoft 365 za pomocą programu Microsoft Graph PowerShell.
Zainstaluj Microsoft Graph PowerShell
Uruchom PowerShell jako administrator i zainstaluj moduł Microsoft Graph PowerShell.
Install-Module Microsoft.Graph -ForceWażny:Zawsze aktualizuj moduł Microsoft Graph PowerShell do najnowszej wersji przed uruchomieniem polecenia cmdlet lub skryptu, aby zapobiec błędom i nieprawidłowym wynikom.
Połącz się z Microsoft Graph PowerShell
Musisz połączyć się z Microsoft Graph PowerShell z odpowiednimi uprawnieniami.
Connect-MgGraph -Scopes "User.Read.All"Czy chcesz się połączyć bez interakcji użytkownika, ponieważ chcesz, aby skrypt działał automatycznie? Skonfiguruj za pomocą uwierzytelniania opartego na certyfikatach lub klucza tajnego klienta. Przeczytaj więcej w artykule Połącz się z Microsoft Graph PowerShell.
Aby uzyskać informacje o wszystkich użytkownikach Microsoft 365 wraz z datą i godziną ostatniej zmiany hasła, uruchom poniższe polecenie.
Get-MgUser -All -Property DisplayName, UserPrincipalName, LastPasswordChangeDateTime | Select-Object -Property DisplayName, UserPrincipalName, LastPasswordChangeDateTimePojawi się wynik.
DisplayName UserPrincipalName LastPasswordChangeDateTime
----------- ----------------- --------------------------
Alison Bell [email protected] 16/04/2024 17:57:46
Amanda Morgan [email protected] 04/06/2024 17:39:05
Audrey Graham [email protected] 11/10/2024 11:12:34
Boris Campbell [email protected] 11/12/2024 17:12:17Chociaż wyniki są świetne, potrzebujemy więcej informacji o każdym użytkowniku platformy Microsoft 365. Stwórzmy raport, aby pobrać więcej właściwości i wyeksportować go do pliku CSV.
Eksportuj raport ostatniej zmiany hasła użytkowników Microsoft 365 za pomocą programu PowerShell
Skrypt programu PowerShell Export-M365LastPassChange.ps1 pobierze wszystkich użytkowników oraz datę i godzinę ostatniej zmiany hasła w dzierżawie Microsoft 365/Entra. Następnie wyeksportuje raport do pliku CSV. Możesz otworzyć plik CSV za pomocą programu Microsoft Excel lub dowolnej innej aplikacji obsługującej rozszerzenie pliku CSV.
Skrypt zbierze następujące informacje:
- Id
- Nazwa główna użytkownika
- Poczta
- Nazwa wyświetlana
- Zasady dotyczące haseł
- Data i godzina ostatniej zmiany hasła
- Data i godzina utworzenia
- Domena
- Maksymalny wiek hasła
- HasłoWiek
- Wygasa w dniu
- Pozostało dni
Aby wyeksportować ostatnią zmianę hasła wszystkich użytkowników w Microsoft 365 za pomocą PowerShell, wykonaj poniższe kroki:
Krok 1. Pobierz skrypt Export-M365LastPassChange PowerShell
Utwórz dwa foldery na(C:)prowadzić:
- Skrypty
- Temp
Pobierz i umieść skrypt Export-M365LastPassChange.ps1 PowerShell w plikuC: Skryptyfalcówka. Skrypt wyeksportuje wszystkich użytkowników z datą i godziną ostatniej zmiany hasła do raportu w plikuC: Tempfalcówka.
Upewnij się, że plik jest odblokowany, aby zapobiec błędom podczas uruchamiania skryptu. Przeczytaj więcej w artykule Błąd braku podpisu cyfrowego podczas uruchamiania skryptu PowerShell.
Inną opcją jest skopiowanie i wklejenie poniższego kodu do Notatnika. Podaj nazwęEksportuj-M365LastPassChange.ps1i umieść go wC: Skryptyfalcówka.
<#
.SYNOPSIS
.Export-M365LastPassChange.ps1
.DESCRIPTION
The script exports the last password change date and time, and more properties
for all Microsoft 365 users to a CSV file.
.LINK
www.alitajran.com/export-microsoft-365-users-last-password-change-date-and-time/
.NOTES
Written by: ALI TAJRAN
Website: www.alitajran.com
LinkedIn: linkedin.com/in/alitajran
X: x.com/alitajran
.CHANGELOG
V1.00, 12/23/2024 - Initial version
#>
param (
[Parameter(Mandatory = $true)]
[string]$ExportPath
)
# Connect to Microsoft Graph PowerShell
Connect-MgGraph -Scopes "User.Read.All", "Domain.Read.All" -NoWelcome
# Define CSV file export location variable using the parameter provided
$Csvfile = "$ExportPath"
# Retrieve all domain password policies
$domains = Get-MgDomain | Select-Object Id, PasswordValidityPeriodInDays
# Define the properties to retrieve for users
$properties = @(
"Id",
"UserPrincipalName",
"mail",
"displayName",
"PasswordPolicies",
"LastPasswordChangeDateTime",
"CreatedDateTime"
)
# Splat the user parameters
$userParams = @{
Filter = "userType eq 'member' and accountEnabled eq true"
Property = $properties
CountVariable = 'userCount'
ConsistencyLevel = 'Eventual'
All = $true
Verbose = $true
}
# Fetch user information
$users = Get-MgUser @userParams | Select-Object $properties
# Get the current datetime for calculation
$timeNow = Get-Date
# Initialize a List to store user information
$Report = [System.Collections.Generic.List[Object]]::new()
# Process users and gather required data
foreach ($user in $users) {
$userDomain = ($user.userPrincipalName).Split('@')[1]
$maxPasswordAge = ($domains | Where-Object { $_.Id -eq $userDomain }).PasswordValidityPeriodInDays
if ($user.PasswordPolicies -contains "DisablePasswordExpiration" -or $maxPasswordAge -eq 2147483647) {
$ReportLine = [PSCustomObject][Ordered]@{
Id = $user.Id
UserPrincipalName = $user.UserPrincipalName
Mail = $user.mail
DisplayName = $user.DisplayName
PasswordPolicies = $user.PasswordPolicies -join "; "
LastPasswordChangeDateTime = $user.LastPasswordChangeDateTime
CreatedDateTime = $user.CreatedDateTime
Domain = $userDomain
MaxPasswordAge = "Password does not expire"
PasswordAge = (New-TimeSpan -Start $user.LastPasswordChangeDateTime -End $timeNow).Days
ExpiresOn = "N/A"
DaysRemaining = "N/A"
}
# Add the report line to the List
$Report.Add($ReportLine)
}
else {
$expiresOn = $user.LastPasswordChangeDateTime.AddDays($maxPasswordAge)
$daysRemaining = (New-TimeSpan -Start $timeNow -End $expiresOn).Days
$ReportLine = [PSCustomObject][Ordered]@{
Id = $user.Id
UserPrincipalName = $user.UserPrincipalName
Mail = $user.mail
DisplayName = $user.DisplayName
PasswordPolicies = $user.PasswordPolicies -join "; "
LastPasswordChangeDateTime = $user.LastPasswordChangeDateTime
CreatedDateTime = $user.CreatedDateTime
Domain = $userDomain
MaxPasswordAge = $maxPasswordAge
PasswordAge = (New-TimeSpan -Start $user.LastPasswordChangeDateTime -End $timeNow).Days
ExpiresOn = $expiresOn
DaysRemaining = if ($daysRemaining -le 0) { "Expired" } else { $daysRemaining }
}
# Add the report line to the List
$Report.Add($ReportLine)
}
}
# Sort on UserPrincipalName
$Report = $Report | Sort-Object UserPrincipalName
# Display the results in Out-GridView
$Report | Out-GridView -Title "Microsoft 365 Users Last Password Change Date and Time Report"
# Export results to CSV
$Report | Export-Csv -Path $Csvfile -NoTypeInformation -Encoding utf8
Write-Host "Script completed. Report exported to $Csvfile" -ForegroundColor CyanKrok 2. Uruchom skrypt Export-M365LastPassChange PowerShell
Uruchom poniższe polecenie, aby uruchomićEksportuj-M365LastPassChange.ps1Skrypt PowerShell i utworzenie raportu.
C:scripts.Export-M365LastPassChange.ps1 -ExportPath "C:tempLastPassChangeReport.csv"Wynik raportu jest wysyłany do interaktywnej tabeli w osobnym oknie (Out-GridView).
POWIĄZANY:Eksportuj raport dotyczący członków ról administracyjnych platformy Microsoft 365

Krok 3. Sprawdź datę i godzinę ostatniej zmiany hasła użytkownika w pliku CSV
Skrypt PowerShell Export-M365LastPassChange.ps1 eksportuje wszystkich użytkowników wraz z datą i godziną ostatniej zmiany hasła do pliku CSV.
Znajdź plikLastPassChangeReport.csvna ścieżceC:temp.
Otwórz plik CSV ze swoją ulubioną aplikacją. W naszym przykładzie jest to Microsoft Excel.

To wszystko!
Wniosek
Dowiedziałeś się, jak wyeksportować datę i godzinę ostatniej zmiany hasła użytkowników Microsoft 365. Następnym razem, gdy będziesz chciał wymusić na użytkownikach zmianę hasła i chcesz poznać status, możesz uruchomić skrypt i sprawdzić datę i godzinę. Dobrze jest mieć skrypt, który utworzy raport zawierający wszystkie potrzebne informacje.
Czy podobał Ci się ten artykuł? Możesz także zainteresować się konfiguracją ochrony hasłem Microsoft Entra dla wersji lokalnej. Nie zapomnij nas obserwować i udostępnić ten artykuł.














