Here are 2 quick lines of code that help you uninstall a Program:
$Prog = Get-WmiObject -Class Win32_Product | Where-Object{$_.Name -match “ProgramName”}
$Prog.Uninstall()
Reading time: 1 min
Here are 2 quick lines of code that help you uninstall a Program:
$Prog = Get-WmiObject -Class Win32_Product | Where-Object{$_.Name -match “ProgramName”}
$Prog.Uninstall()
If you need to deploy a MS Store App for example through Intune or GPO, here is my script:
First of all you need the App ID of the store app. Go to https://apps.microsoft.com/ search for the app and select it. In the URL you will see something like this: https://apps.microsoft.com/detail/9nw77489ngj0?hl=en-us&gl=US. 9nw77489ngj0 is the App ID.
Now the script:
Start-Transcript -Path “C:\3cx_msstore.log”
$appid=”9NW77489NGJ0″
winget install -e –id $appid –source msstore –accept-source-agreements –accept-package-agreements
winget upgrade –id $appid
Stop-Transcript
Having issue Azure AD joining a Windows 10 or 11 computer and getting error 8018000a? This script might help you. It deletes all keys except Context under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Enrollments
$EnrollmentsPath = “HKLM:\SOFTWARE\Microsoft\Enrollments\”
$Enrollments = Get-ChildItem -Path $EnrollmentsPath
$DiscoveryServerFullUrls = @(“https://wip.mam.manage.microsoft.com/Enroll”)
Foreach ($Enrollment in $Enrollments) {
$EnrollmentObject = Get-ItemProperty Registry::$Enrollment
if ($EnrollmentObject.”DiscoveryServiceFullURL” -in $DiscoveryServerFullUrls ) {
$EnrollmentPath = $EnrollmentsPath + $EnrollmentObject.”PSChildName”
Remove-Item -Path $EnrollmentPath -Recurse
& “C:\Windows\System32\deviceenroller.exe /c /AutoEnrollMDM”
}
}
References:
https://jocha.se/blog/tech/azure-ad-mdm-intune-error-8018000a
If you have deleted a user in Exchange Online that is synced from onprem and you need to restore it, you might not want to re-sync the local user. In that case you can restore the deleted user directly in Exchange Online and make a cloud only user.
Get the deleted mailbox by name and Exchange GUI:
Get-Mailbox -SoftDeletedMailbox | Select-Object Name,ExchangeGuid
Create a new cloud only user or shared mailbox and run this command:
Get-Mailbox -Identity <NameOrAliasOfNewTargetMailbox> | Format-List ExchangeGuid
Restore the deleted mailbox/user into the newly created cloud user:
New-MailboxRestoreRequest -SourceMailbox <SoftDeletedMailboxGUID> -TargetMailbox <NewTargetMailboxGUID> –AllowLegacyDNMismatch
References:
https://learn.microsoft.com/en-us/exchange/recipients-in-exchange-online/delete-or-restore-mailboxes
This quick script shows you if and where inheritance is deactivated. You can also set in the parameters how deep or how many levels inheritance is checked.
# Function to check inheritance up to the specified level
function Check-Inheritance {
param (
[string]$directoryPath,
[int]$currentLevel,
[int]$maxLevel
)
# Exit if current level exceeds max level
if ($currentLevel -gt $maxLevel) {
return
}
# Get the ACL of the directory
$acl = Get-Acl -Path $directoryPath
# Check if inheritance is disabled
if ($acl.AreAccessRulesProtected) {
Write-Output "$directoryPath - Inheritance is disabled"
} else {
#Write-Output "$directoryPath - Inheritance is enabled"
}
# Recursively check subdirectories if current level is less than max level
if ($currentLevel -lt $maxLevel) {
$subdirectories = Get-ChildItem -Path $directoryPath -Directory
foreach ($subdir in $subdirectories) {
Check-Inheritance -directoryPath $subdir.FullName -currentLevel ($currentLevel + 1) -maxLevel $maxLevel
}
}
}
# Function to check inheritance up to the specified level
function Check-Inheritance {
param (
[string]$directoryPath,
[int]$currentLevel,
[int]$maxLevel
)
# Exit if current level exceeds max level
if ($currentLevel -gt $maxLevel) {
return
}
# Get the ACL of the directory
$acl = Get-Acl -Path $directoryPath
# Check if inheritance is disabled
if ($acl.AreAccessRulesProtected) {
Write-Output "$directoryPath - Inheritance is disabled"
} else {
#Write-Output "$directoryPath - Inheritance is enabled"
}
# Recursively check subdirectories if current level is less than max level
if ($currentLevel -lt $maxLevel) {
$subdirectories = Get-ChildItem -Path $directoryPath -Directory
foreach ($subdir in $subdirectories) {
Check-Inheritance -directoryPath $subdir.FullName -currentLevel ($currentLevel + 1) -maxLevel $maxLevel
}
}
}
To execute the script:
Check-Inheritance -directoryPath $rootDirectory -currentLevel 1 -maxLevel 3