我刚开始使用PowerShell脚本,遇到了user.accountEnabled
的问题。我发现在检索数据时需要使用适当的select语句,所以我使用
https://graph.microsoft.com/v1.0/users/?$select=displayname,accountEnabled,userPrincipalName
我使用的是应用ID和应用密码,我在Postman中确认(使用相同的凭据),我得到了正确的响应,没有任何权限问题,一切看起来都很好。
我的问题是,当我将accountEnabled
数据赋给变量时,没有添加任何值。
下面是敏感数据被删失的脚本。
function Get-ListOfExchangeUsers {
# Dane do połączenia z bazą danych
$ServerName = "x"
$DatabaseName = "pwa"
# Połączenie z bazą danych
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$ServerName;Database=$DatabaseName;Integrated Security=True"
$SqlConnection.Open()
$TenantId = "x"
# Identyfikator aplikacji
$AppId = "x"
# Tajny klucz aplikacji
$AppSecret = "x"
# Utwórz adres URL żądania tokena
$authUrl = "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token"
# Utwórz obiekt żądania tokenu
$tokenRequestBody = @{
grant_type = "client_credentials"
client_id = $AppId
client_secret = $AppSecret
scope = "https://graph.microsoft.com/.default"
}
# Wyślij żądanie tokenu do usługi Azure AD
$tokenResponse = Invoke-RestMethod -Method POST -Uri $authUrl -Body $tokenRequestBody
# Pobierz token dostępu z odpowiedzi
$accessToken = $tokenResponse.access_token
# Utwórz nagłówek autoryzacji z tokenem dostępu
$authHeader = @{
"Authorization" = "Bearer $accessToken"
"Content-Type" = "application/json"
}
# Wykonaj żądanie API Microsoft Graph w celu pobrania użytkowników
$graphUrl = "https://graph.microsoft.com/v1.0/users/?$select=displayname,accountEnabled,userPrincipalName"
$Users = Invoke-RestMethod -Method GET -Uri $graphUrl -Headers $authHeader
# Dodaj pobrane dane użytkowników do tabeli "allmailboxes" w bazie danych "pwa"
foreach ($user in $Users.value) {
$email = $user.userPrincipalName
# Zapytanie SQL sprawdzające, czy istnieje już użytkownik o podanym adresie email w tabeli allmailboxes
$query = "SELECT * FROM allmailboxes WHERE EmailAddress = '$email'"
$command = New-Object System.Data.SqlClient.SqlCommand($query, $SqlConnection)
$result = $command.ExecuteScalar()
# Jeśli zapytanie zwróciło wynik, to znaczy że taki użytkownik już istnieje w bazie danych - pomiń go
if ($null -ne $result) {
# Sprawdź, czy konto użytkownika jest wyłączone
$accountEnabled = $user.accountEnabled
Write-Host $email
Write-Host $accountEnabled
if ($accountEnabled -eq $false) {
$query = "UPDATE allmailboxes SET Disabled = 'true' WHERE EmailAddress = '$email'"
$command = New-Object System.Data.SqlClient.SqlCommand($query, $SqlConnection)
$command.ExecuteNonQuery()
continue
}
continue
}
# Pobierz informację o tym, czy konto jest wyłączone czy włączone
$disabled = $user.accountEnabled
# Jeśli taki użytkownik nie istnieje w bazie danych, dodaj go do tabeli allmailboxes
$fullName = $user.displayName
$query = "INSERT INTO allmailboxes (FullName, EmailAddress, Disabled) VALUES ('$fullName', '$email', '$disabled')"
$command = New-Object System.Data.SqlClient.SqlCommand($query, $SqlConnection)
$command.ExecuteNonQuery()
}
# Zamknij połączenie z bazą danych
$SqlConnection.Close()
# Zwróć listę użytkowników
return $Users
}
我在脚本中添加了一行代码来显示accountEnabled的值,它显示了一个null值。
列表中的最后一个帐户被禁用,并且应该返回与其他帐户不同的值。我还附上了来自Graph API的响应。
有人能看看这个,看看我做错了什么吗?
1条答案
按热度按时间iyr7buue1#
你要打的地址是
现在,因为它全部用双引号括起来,而且没有
$select
变量,所以您的url将如下所示如果你用单引号声明你的url,它应该可以正常工作,所以: