jeudi 2 novembre 2023

New-RandomPassword

Fonction pour générer des mots de passe aléatoires.


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
}

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

// Utilisateurs authentifiés dans Azure AD mais que le "Device" ne se retrouve pas dans Intune
// Michel Caron

SigninLogs
| 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