function New-RandomPassword { param ( [Parameter()] [int]$Length=12 ) $Password = "" for($i=0; $i -LT $Length ; $i++) { $Password = -join ($Password,[char]((46..46)+(48..57)+(65..90)+(97..122)|Get-Random)) } Return $Password }
jeudi 2 novembre 2023
New-RandomPassword
samedi 2 septembre 2023
Azure: Liste des utilisateurs pour des fins de contrôle
Le personnel de la conformité demande régulèrement une liste des utilisateurs avec certaines informations permettant d'évaluer si la gestion des utilisateurs est conforme aux politiques de l'entreprise.
Ce script produit un fichier qui pourra être importé dans Excel ou un autre outil de votre choix.
https://github.com/OS4Techno/os4tools/blob/main/AzureUserList.ps1
<# OS4 Techno, Services TI Inc. Septembre 2023 Purpose: Get information about user Repository: https://github.com/OS4Techno/OS4Tools #> $Properties = "AccountEnabled,` ID,` createdDateTime,` creationType,` deletedDateTime,` employeeHireDate, ` employeeLeaveDateTime, ` externalUserState, ` externalUserStateChangeDateTime,` lastPasswordChangeDateTime,` signInActivity,` DisplayName,` GivenName,` JobTitle,` UserPrincipalName,` UserType" $PropertiesOut = ("DisplayName",` "AccountEnabled",` "createdDateTime",` "creationType",` "deletedDateTime",` "externalUserState", ` "externalUserStateChangeDateTime",` "lastPasswordChangeDateTime",` "lastSignInDateTime",` "GivenName",` "JobTitle",` "UserPrincipalName",` "UserType") Connect-MgGraph -Scopes User.Read, User.ReadWrite, User.ReadBasic.All, User.Read.All, User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All Select-MgProfile beta # SignInActivity not include in the version 1.0 $UserInformation = (get-mguser -All -property $Properties | Select-Object -Property $PropertiesOut -ExpandProperty SignInActivity -ErrorAction SilentlyContinue | Select-Object $PropertiesOut) $UserInformation | Export-csv -Path .\CloudUserList.CSV -Encoding utf8 -Delimiter ';' -UseQuotes AsNeeded Disconnect-MgGraph
mardi 29 août 2023
Microsoft Teams - Liste des équipes incluant les membres des canaux
Quand vient le temps de repenser les équipes dans Microsoft Teams, ça débute habituellement par faire le ménage. Ce script produit un fichier qui pourra être importé dans Excel ou un autre outil de votre choix.
https://github.com/OS4Techno/os4tools/blob/main/TeamsChannelMembership.ps1
<# OS4 Techno, Services TI Inc. August 2023 Purpose: Get the Teams Channels Membership with role Repository: https://github.com/OS4Techno/OS4Tools #> Connect-MicrosoftTeams $Teams = Get-Team $Out = @{} ForEach($G in $Teams) {ForEach($_ in (Get-TeamChannel -GroupId $G.GroupID)) {$Members = ((Get-TeamChannelUser -GroupId $G.GroupID -DisplayName $_.DisplayName) | Select-Object Name,Role) ForEach($M in $Members) { $Out.Add($G.DisplayName+";"+$_.Displayname+";"+$M.Name+";"+$M.Role,"") } } } $Out.Keys | Set-Content -Path .\TeamsMembers.csv
jeudi 13 juillet 2023
Exchange Online - Changer l'adresse SMTP par défaut - Ajouter des alias
Pour différentes raisons (fusion d'entreprises, changement du domaine principal,...) il peut s'avérer nécessaire de devoir changer l'adresse de courriel par défaut des utilisateurs. Voici les lignes de commandes à executer.
Connect-ExchangeOnline $MailboxesSMTP = (Get-EXOMailbox | Where-Object PrimarySmtpAddress -like '<Domain Name>') ForEach($_ in $MailboxesSMTP){ $FirstStep = $_.EmailAddresses.replace('SMTP:','smtp:') ;` $ActualSMTP = 'smtp:'+$_.UserPrincipalName; ` $DefaultSMTP = 'SMTP:'+$_.UserPrincipalName ; ` $SecondStep = $FirstStep.replace($ActualSMTP,$DefaultSMTP) Set-MailBox -identity $_.Identity -EmailAddresses $SecondStep}
Dans le même contexte, il peut être nécessaire d'ajouter des alias.
Connect-ExchangeOnline $AliasToApply = @( [PSCustomObject]@{ UserPrincipalName="User1@domain" Emails=@("smtp:User1@domain") }; [PSCustomObject]@{ UserPrincipalName="User2@domain" Emails=@("smtp:alias1@domain";"smtp:alias2@domain") } ) ForEach($_ in $AliasToApply) {$Mailbox = (Get-EXOMailbox -UserPrincipalName $_.UserPrincipalName) ; $Alias = $Mailbox.EmailAddresses ; ForEach($E in $_.Emails) {$Alias.Add($E); Set-Mailbox -Identity $MailBox.Identity -EmailAddresses $Alias}}
dimanche 28 mai 2023
Azure AD Connect - Retrait de domaine ProxyAddresses
Dans le contexte où les "mailboxes" d'un Tenant sont hébergés sur un serveur MS Exchange à l'interne (On-Premises) et qu'un domaine à retirer du Tenant est référencé dans les ProxyAddresses, il devient nécessaire de modifier les références au domaine dans les ProxyAddresses.
- Arrêter la synchronisation (Stop-ADSyncSyncCycle)
- Démarrer Synchronization Rules Editor
- Effectuer une copie (clone) de la règle (In-bound) In-From AD - User Common
- Désactiver l'originale
- Modifier la "Translation" ProxyAddresses dans la copie par:
RemoveDuplicates(Replace(Trim(ImportedValue("proxyAddresses")),"<domain-to-remove>",<dummy-domain>"))
- Démarrer la synchronisation (Start-ADSyncSyncCycle)
- Retirer le domaine du Tenant
- Arrêter la synchronisation
- Retourner dans le Synchronisation Rules Editor
- Effacer la copie
- Activer la règle originale.
- Démarrer la synchronisation
jeudi 5 janvier 2023
Endpoint Manager: Evaluation de la conformité des postes de travail
Dans un monde moderne, l'évaluation de la conformité d'un poste ne se limite pas à évaluer la version de Windows et ses rustines (patches). Il est souvent demandé que pour reconnaitre la conformité d'un poste de travail (endpoint) que certains logiciels soient installés.
Dans le contexte d'Endpoint Manager (Intune), il est possible de personnaliser certaines évaluations de la conformité à l'aide un script PowerShell qui récupère des informations sur le poste de travail et les comparent à un fichier JSON d'évaluation .
Dans l'exemple illustré, la présence des installations Darktrace et TrendMicro est évaluée.
L'évaluation pourra donner des résultats sous la forme suivante:
Le lien suivant vous donne accès au script PowerShell et le fichier JSON de cet exemple:
https://github.com/OS4Techno/EndpointManagerCompliance
vendredi 4 novembre 2022
Kusto: Utilisateurs authentifiés dans Azure AD mais que le "Device" ne se retrouve pas dans Intune
// Michel Caron
| where ClientAppUsed contains "Browser"
| extend String=tostring(DeviceDetail)
| extend DeviceName=extractjson("$displayName", String)
| where DeviceName != ""
| join kind=leftanti IntuneDevices on $left.DeviceName == $right.DeviceName
| distinct Location,DeviceName,UserDisplayName,UserPrincipalName
| order by Location,DeviceName