将数据从Graph API检索到PowerShell时出现问题

ht4b089n  于 2023-05-17  发布在  Shell
关注(0)|答案(1)|浏览(135)

我刚开始使用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的响应。

有人能看看这个,看看我做错了什么吗?

iyr7buue

iyr7buue1#

你要打的地址是

https://graph.microsoft.com/v1.0/users/?$select=displayname,accountEnabled,userPrincipalName

现在,因为它全部用双引号括起来,而且没有$select变量,所以您的url将如下所示

https://graph.microsoft.com/v1.0/users/?=displayname,accountEnabled,userPrincipalName

如果你用单引号声明你的url,它应该可以正常工作,所以:

$graphUrl = 'https://graph.microsoft.com/v1.0/users/?$select=displayname,accountEnabled,userPrincipalName'

相关问题