Skip to content

Instantly share code, notes, and snippets.

[ValidateScript({
$requiredProperties=@("Property1","Property2","Property3", "Property4")
$members=Get-Member -InputObject $_ -MemberType NoteProperty
$missingProperties=Compare-Object -ReferenceObject $requiredProperties -DifferenceObject $members.Name -PassThru -ErrorAction SilentlyContinue
if (-not($missingProperties)){
function New-Example{
[CmdletBinding()]
Param(
[Parameter(
Mandatory=$true,
Position=0)]
[ValidateScript({
$requiredProperties=@("Property1","Property2","Property3", "Property4")
#requires -Modules AzureAD
$UsageLocation = Get-AutomationVariable -Name "UsageLocation" -ErrorAction Stop
$servicePrincipalConnection = Get-AutomationConnection -Name "AzureRunAsConnection" -ErrorAction Stop
Connect-AzureAD -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
Get-AzureADUser | Where-Object{$_.UsageLocation -ne $UsageLocation} | ForEach-Object {
@nicolonsky
nicolonsky / Rollover-KerberosDecryptionKey.ps1
Last active August 19, 2019 12:36
Roll Over Kerberos Decryption Key
Import-Module "$env:ProgramFiles\Microsoft Azure Active Directory Connect\AzureADSSO.psd1"
New-AzureADSSOAuthenticationContext
$creds = Get-Credential
Update-AzureADSSOForest -OnPremCredentials $creds
@nicolonsky
nicolonsky / Get-DefenderScanHistory.ps1
Created September 5, 2018 06:46
Check Windows Defender Scan Events
Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" | where {$_.ID -eq 1000} | Export-Csv "c:\mphistory.csv" -NoTypeInformation
@nicolonsky
nicolonsky / ConnectMsGraph-AzSCP.ps1
Created December 10, 2019 10:17
Connect to Microsoft Graph with an Azure Service Principal certificate
servicePrincipalConnection = Get-AutomationConnection -Name "AzureRunAsConnection" -ErrorAction Stop
Update-MSGraphEnvironment -AuthUrl "https://login.microsoftonline.com/$($servicePrincipalConnection.TenantId)" -AppId $servicePrincipalConnection.ApplicationId
Connect-MSGraph -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint -Quiet
Get-DeviceManagement_ManagedDevices
@nicolonsky
nicolonsky / LicenseAssignmentErrors.ps1
Created December 11, 2019 17:41
Get all Office 365, Azure users with license assignment errors [requires msonline module]
$licenseAssignmentErrors = Get-MsolGroup -HasLicenseErrorsOnly $true | % {
$groupId = $_.ObjectId
Get-MsolGroupMember -All -GroupObjectId $groupId |
Get-MsolUser -ObjectId {$_.ObjectId} |
Where {$_.IndirectLicenseErrors -and $_.IndirectLicenseErrors.ReferencedObjectId -eq $groupId} |
@nicolonsky
nicolonsky / DisableSelfServicing.ps1
Created March 11, 2020 09:31
Disable self-service purchases
# Disable Office 365 Self-Servicing Purchases
# src: https://docs.microsoft.com/en-us/microsoft-365/commerce/subscriptions/allowselfservicepurchase-powershell?view=o365-worldwide
# Install abd connect MSCommerce services with PowerShell
Install-Module -Name MSCommerce -Scope CurrentUser
Connect-MSCommerce
Get-MSCommerceProductPolicies -PolicyId AllowSelfServicePurchase
# Disable Self-Servicing for all products
@nicolonsky
nicolonsky / Create-ClientCredentialCertificate.ps1
Last active May 10, 2020 21:03
Create Azure AD App Registration Client Credential Certificate
$displayName = "Microsoft Graph PowerShell Client Credentials"
$notAfter = $(Get-Date).AddYears(1)
$cert = New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my -DnsName graph.microsoft.com -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" -NotAfter $notAfter -FriendlyName $displayName
$export = Export-Certificate -Cert "cert:\currentuser\my\$($cert.Thumbprint)" -FilePath "c:\temp\$displayName.cer"
Write-Output "Exported certificate '$($cert.Thumbprint)' to '$($export.FullName)'"
@nicolonsky
nicolonsky / Remediate-DefenderQuickScan.ps1
Created September 28, 2020 21:03
Endpoint analytics, Proactive remediations start Defender quick scan
Start-MpScan -ScanType QuickScan