cli-microsoft365
msgraph-sdk-javascript
Our great sponsors
cli-microsoft365 | msgraph-sdk-javascript | |
---|---|---|
3 | 14 | |
865 | 713 | |
2.0% | 1.3% | |
9.7 | 9.3 | |
1 day ago | 9 days ago | |
TypeScript | TypeScript | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
cli-microsoft365
-
Backing up a school's intranet resources - possible?
I've tried using things like: https://github.com/pnp/cli-microsoft365 but couldn't figure out how to properly store anything I downloaded (downloaded files just fine, just not sites or ASP.NET files).
-
CLI for Microsoft 365 v3.4
If you have any scripts that you use frequently, please share them with us so that we can learn more about the common automation scenarios.
msgraph-sdk-javascript
- Import AzureAD app role assignments into Terraform state
-
Find the length of an email attachment name.
# Import the required modules Import-Module -Name AzureAD, Microsoft.Graph.Authentication, Microsoft.Graph.MailMessages -Force # Authenticate with MFA using the admin account $adminUsername = "XXXX.xxx" Connect-AzureAD -AccountUpn $adminUsername try { # Prompt for user's email address $userEmailAddress = Read-Host -Prompt "Enter the user's email address" # Get the user's emails with attachments $accessToken = Get-AzureADAccessToken -ResourceUrl "https://graph.microsoft.com" $graphClient = New-Object Microsoft.Graph.GraphServiceClient -ArgumentList ($accessToken.AccessToken) $emails = $graphClient.Users[$userEmailAddress].Messages.Request().Top(100).Filter("hasAttachments eq true").GetAsync().Result # Filter emails with attachments having names longer than 50 characters $longAttachments = $emails.Attachments | Where-Object { $_.Name.Length -gt 50 } # Output the attachments, subject, and date of the email if ($longAttachments.Count -gt 0) { Write-Host "Attachments with names longer than 50 characters for $userEmailAddress" foreach ($attachment in $longAttachments) { $email = $emails | Where-Object { $_.Attachments -contains $attachment } Write-Host "Subject: $($email.Subject)" Write-Host "Date: $($email.ReceivedDateTime.DateTime)" Write-Host "Attachment Name: $($attachment.Name)" Write-Host "" } } else { Write-Host "No attachments found with names longer than 50 characters for $userEmailAddress." } } catch { Write-Host "Failed to retrieve email attachments: $($_.Exception.Message)" } finally { # Disconnect from Azure AD Disconnect-AzureAD -Confirm:$false }
- La ville de bordeaux met en libre accès les vitesses enregistrées par ses radars pédagogiques : la grande majorité des automobilistes ne respectent pas les limitations de vitesse.
-
Container access to containers based on azure AD groups
labels: - "traefik.http.middlewares.traefik-azure-auth-group1.azure.authProvider=traefik-forward-auth" - "traefik.http.middlewares.traefik-azure-auth-group1.azure.resource=https://graph.microsoft.com/" - "traefik.http.middlewares.traefik-azure-auth-group1.azure.requiredGroup=group1"
-
Filtering app names that start with
$AccessToken = (Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com").Token $AccessToken = ConvertTo-SecureString -AsPlainText $AccessToken -Force If($connect -eq $null){$connect = Connect-MgGraph -AccessToken $AccessToken} $Apps = Get-MgServicePrincipal -All $today = Get-Date $credentials = foreach ($App in $Apps) { foreach ($Credential in $App.PasswordCredentials) { [pscustomobject]@{ DisplayName = $App.DisplayName.where({ $_ -notlike "sp-*" }) Id = $App.Id AppId = $App.AppId EndDateTime = $Credential.EndDateTime PwdDisplayName = $Credential.DisplayName KeyId = $Credential.KeyId } } }
- Have you worked with Microsoft Graph API?
-
Backup DNS if/when AdGuard container doesn't work
The results from that host are almost all MS (graph.microsoft.com, c1-shared-15.cdn.office.net, teams.microsoft.com, webshell.suite.office.com) This happens to be my linux laptop, but I use several MS products in chrome and do a lot of api testing with MS products. So this makes sense.
-
Need some script helping - M365 API
$ApplicationID = 'applicationid from my app registration with relevant permissions' $ApplicationKey = 'application secret' $tenantid = 'obviously the tenant id' $URI = 'teams webhook url' $Minutes = '2' $ExchangeOnline = 'yes' $MicrosoftForms = '' $MicrosoftIntune = '' $MicrosoftKaizala = '' $SkypeforBusiness = '' $MicrosoftDefenderATP = '' $MicrosoftFlow = '' $FlowinMicrosoft365 = '' $MicrosoftTeams = 'yes' $MobileDeviceManagementforOffice365 = '' $OfficeClientApplications = '' $Officefortheweb = '' $OneDriveforBusiness = 'yes' $IdentityService = '' $Office365Portal = 'yes' $OfficeSubscription = '' $Planner = '' $PowerApps = '' $PowerAppsinMicrosoft365 = '' $PowerBI = '' $AzureInformationProtection = '' $SharePointOnline = 'yes' $MicrosoftStaffHub = '' $YammerEnterprise = '' $Microsoft365Suite = '' $Incident = 'yes' $Advisory = '' $ServicesArray = @() if($ExchangeOnline){$ServicesArray += '$_.service -eq "Exchange Online"'} if($MicrosoftForms){$ServicesArray += '$_.service -eq "Microsoft Forms"'} if($MicrosoftIntune){$ServicesArray += '$_.service -eq "Microsoft Intune"'} if($MicrosoftKaizala){$ServicesArray += '$_.service -eq "Microsoft Kaizala"'} if($SkypeforBusiness){$ServicesArray += '$_.service -eq "Skype for Business"'} if($MicrosoftDefenderATP){$ServicesArray += '$_.service -eq "Microsoft Defender ATP"'} if($MicrosoftFlow){$ServicesArray += '$_.service -eq "Microsoft Flow"'} if($FlowinMicrosoft365){$ServicesArray += '$_.service -eq "Flow in Microsoft 365"'} if($MicrosoftTeams){$ServicesArray += '$_.service -eq "Microsoft Teams"'} if($MobileDeviceManagementforOffice365){$ServicesArray += '$_.service -eq "Mobile Device Management for Office 365"'} if($OfficeClientApplications){$ServicesArray += '$_.service -eq "Office Client Applications"'} if($Officefortheweb){$ServicesArray += '$_.service -eq "Office for the web"'} if($OneDriveforBusiness){$ServicesArray += '$_.service -eq "OneDrive for Business"'} if($IdentityService){$ServicesArray += '$_.service -eq "Identity Service"'} if($Office365Portal){$ServicesArray += '$_.service -eq "Office 365 Portal"'} if($OfficeSubscription){$ServicesArray += '$_.service -eq "Office Subscription"'} if($Planner){$ServicesArray += '$_.service -eq "Planner"'} if($PowerApps){$ServicesArray += '$_.service -eq "PowerApps"'} if($PowerAppsinMicrosoft365){$ServicesArray += '$_.service -eq "PowerApps in Microsoft 365"'} if($PowerBI){$ServicesArray += '$_.service -eq "Power BI"'} if($AzureInformationProtection){$ServicesArray += '$_.service -eq "Azure Information Protection"'} if($SharepointOnline){$ServicesArray += '$_.service -eq "Sharepoint Online"'} if($MicrosoftStaffHub){$ServicesArray += '$_.service -eq "Microsoft StaffHub"'} if($YammerEnterprise){$ServicesArray += '$_.service -eq "Yammer Enterprise"'} if($Microsoft365Suite){$ServicesArray += '$_.service -eq "Microsoft 365 Suite"'} $ServicesString = $ServicesArray -Join " -or " $ClassificationArray = @() if($Incident){$ClassificationArray += '$_.Classification -eq "incident"'} if($Advisory){$ClassificationArray += '$_.Classification -eq "advisory"'} $ClassificationString = $ClassificationArray -Join " -or " $body = @{ grant_type="client_credentials"; resource="https://graph.microsoft.com"; client_id=$ApplicationID; client_secret=$ApplicationKey; earliest_time="-$($Minutes)m@s"} $oauth = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token?api-version=1.0" -Body $body $headerParams = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"} $messages = (Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues" -Headers $headerParams -Method Get) $incidents = $messages.Value | Where-Object ([scriptblock]::Create($ClassificationString)) | Where-Object ([scriptblock]::Create($ServicesString)) $Now = Get-Date ForEach ($inc in $incidents){ # Add updates posted last $Minutes If (($Now - [datetime]$inc.lastModifiedDateTime).TotalMinutes -le $Minutes) { # Set the color line of the card according to the Classification of the event, or if it has ended if ($inc.Classification -eq "incident" -and $inc.EndTime -eq $null) { $color = "ff0000" # Red } else { if ($inc.EndTime -ne $null) { $color = "00cc00" # Green } else { $color = "ffff00" # Yellow } } $Message = $inc.posts.description.content[$inc.Messages.Count-1] | ConvertTo-Json $Payload = @" { "@context": "https://schema.org/extensions", "@type": "MessageCard", "potentialAction": [ { "@type": "OpenUri", "name": "Post INC document", "targets": [ { "os": "default", "uri": "$($inc.PostIncidentDocumentUrl)" } ] }, ], "sections": [ { "facts": [ { "name": "Service:", "value": "$($inc.service)" }, { "name": "Status:", "value": "$($inc.Status)" }, { "name": "Classification:", "value": "$($inc.classification)" } ], "text": $($Message) } ], "summary": "$($Inc.Title)", "themeColor": "$($color)", "title": "$($Inc.Id) - $($Inc.Title)" } "@ Invoke-RestMethod -uri $uri -Method Post -body $Payload -ContentType 'application/json; charset=utf-8' } }
-
AzureAD -filter string multiple values
$token = (Get-AzAccessToken -ResourceUrl https://graph.microsoft.com).token
-
How do your create a JWT to access MSGRAPH API with Certificate Based Authentication???
# Get the certificate from the certificate store $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("MY", "LocalMachine") $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly) $cert = $store.Certificates | Where-Object { $_.Subject -eq "CN=your_certificate_name" } # Build the JWT assertion $header = @{alg="RS256";typ="JWT"} $payload = @{iss="your_client_id";sub="your_client_id";aud="https://graph.microsoft.com";exp=(Get-Date).AddMinutes(10).ToUnixTime()} $headerEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(($header | ConvertTo-Json))) $payloadEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(($payload | ConvertTo-Json))) $data = "{0}.{1}" -f $headerEncoded, $payloadEncoded $signature = [System.Convert]::ToBase64String($cert.GetRSAPrivateKey().SignData(([Text.Encoding]::UTF8.GetBytes($data)), "SHA256")) $jwt = "{0}.{1}.{2}" -f $headerEncoded, $payloadEncoded, $signature # Make the request to the Microsoft Graph API $response = Invoke-WebRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/users?$select
What are some alternatives?
Office365-REST-Python-Client - Microsoft 365 & Microsoft Graph Library for Python
vscode-msgraph-autocomplete - This VSCode extension allows you to auto-complete the Microsoft Graph API URLs you are writing. You get the most useful Microsoft Graph Explorer functionality in your favorite editor.
Microsoft365DSC - Manages, configures, extracts and monitors Microsoft 365 tenant configurations
mgt-react-codetour - Interactive tour to help you build your first React app using Microsoft Graph Toolkit
office365-cli - Manage Microsoft 365 and SharePoint Framework projects on any platform [Moved to: https://github.com/pnp/cli-microsoft365]
upload-files-to-sp-using-graph - Example of how you can upload files to sharepoint using microsoft graph
active-directory-b2c-custom-policy-starterpack - Azure AD B2C now allows uploading of a Custom Policy which allows full control and customization of the Identity Experience Framework
Angular - Deliver web apps with confidence 🚀
spfx-fast-serve - Improve your SharePoint Framework development flow by speeding up the "serve" command :rocket:
fortigate-autoscale-azure - An implementation of FortiGate Autoscale for the Microsoft Azure platform API with a Cosmos DB storage backend.
Visual Studio Code - Visual Studio Code