Few of the articles are posted as Images, Please use Laptop / Computers to go through the articles for best experience. For phone users, switch to Web Version

Please Share with your colleagues if you found these blogs informative. Happy Learning :-)

Group Policy Processing Order



Migrating DFS Namespace


Fetching all Windows Server details from Active Directory

 <# Created By Abhishek Bansal

Read Note 

Script Usage - Fetching all Windows Server details in the domain from Active Directory. Useful in doing inventory management.

Pre requisites :: Copy all the code into a text file, save it with an extension ".PS1". Once saved, run this script as Administrator

Execution & Outputs :: Once executed, there will be two Output files created as -

ADCompdetails.csv - Containing details of all the Windows server found in Active Directory.

Errorlogs.csv - Logs any error while fetching the uptime.#>

 

 $inputsrv = $(Get-ADComputer -Filter * -Properties OperatingSystem | ?{$_.OperatingSystem -match "Server"}).Name

foreach($server in $inputsrv)

{

$error.Clear()

    try{

    Get-ADComputer -Identity $server -Properties * | Select Name,OperatingSystem,DistinguishedName,IPv4Address,Enabled,Created | Export-Csv ./ADCompdetails.csv -NoTypeInformation -Append

        }

    catch

    {

    $server | Select-Object -Property @{n="Hostname";e={$server}},@{n="ErrorMessage";e={$error.exception.Message}} | Export-Csv ./Errorlogs.csv -NoTypeInformation -Append

    }

}

 


Fetching Uptime of Remote Windows Servers

  <# Created By Abhishek Bansal

Read Note 

Script Usage - Useful in fetching uptime of Servers mentioned in a txt file.

Pre requisites :: Copy all the code into a text file, save it with an extension ".PS1". On same location create a txt file named "Servers.txt" containing name of servers. Once saved, run this script as Administrator.

Execution & Outputs :: Once executed, there will be two Output files created as -

Uptime.csv - Containing uptime of Servers

Errorlogs.csv - Logs any error while fetching the uptime.#>


function fetchuptime($server)

{

    try{

    $Error.Clear()

    $details = Invoke-Command -ComputerName $server -ErrorAction Stop -ScriptBlock{Get-CimInstance -ClassName Win32_OperatingSystem}

    return $($details.LocalDateTime - $details.LastBootUpTime)

    }

    catch

    {

    Write-Host -ForegroundColor Red "Logging error while fetching uptime of $server."

    $server | Select-Object -Property @{n="Hostname";e={$server}},@{n="ErrorMessage";e={$Error.exception.Message}} | Export-Csv ./Errorlogs.csv -NoTypeInformation -Append

    return "Error"  

    }

}


$Servers = Get-Content .\Servers.txt

Write-Host "Total Servers count = $($servers.count)"

#Pause for confirmation..

foreach($server in $Servers)

{

$server = $server.trim()

 try{

    $Error.Clear()

    Write-Host -ForegroundColor Yellow "`nChecking if $server exist in the domain or not ..."

    $compdetails = Get-ADComputer -Identity $server -Properties OperatingSystem 

    Write-Host -ForegroundColor Green "$server exist in domain having $($compdetails.OperatingSystem) OS."

    $uptime = fetchuptime -server $server

    if($uptime -eq "Error")

    {

   continue

    }

    else

    {

    $server | Select-Object -Property @{n="Hostname";e={$server}},@{n="Uptime";e={$(echo "Uptime is $($uptime.Days)Days $($uptime.Hours)Hrs $($uptime.Minutes)mins")}} | Export-Csv ./Uptime.csv -NoTypeInformation -Append

    }

   }

catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]

    {

    Write-Host -ForegroundColor Red "Logging error while fetching status of $server."

    $server | Select-Object -Property @{n="Hostname";e={$server}},@{n="ErrorMessage";e={$Error.exception.Message}} | Export-Csv ./Errorlogs.csv -NoTypeInformation -Append

    }

}


Fetching NTFS Permissions, Inheritance Status & Ownership details of Root folders along with 1 Level Sub folders

 <# Created By Abhishek Bansal

 Read Note 

Script Usage - Useful in fetching Owners details, Inheritance status, NTFS Permissons of Parent / Root folder & one Level Sub folders.

Pre requisites :: Copy all the code into a text file, save it with an extension ".PS1". On same location create a txt file named "InputPath.txt" containing UNC path of share folders. Once saved, run this script as Administrator.

Execution & Outputs :: Once executed, there will be four Outifle files created which would be -

ParentfolderInheritance.csv - Containing parent folder Ownnership details along with inheritance status.

ParentfolderACL.csv - Containing parent folder NTFS permissions.

SubfoldersInheritance.csv - Containing one level subfoldes Ownnership details along with inheritance status.

SubfoldersACL.csv - Containing NTFS permissions for 1 level sub folders inside the parent folders.


Along with above, Errorlogs.csv can also be produced if there are any errors encountered while executing this script.#>

 

 $rootfolders = Get-Content .\InputPath.txt

foreach($rootpath in $rootfolders)

{

$rootpath = $rootpath.trim()

Get-Acl -Path $rootpath  |  Select Path,Owner,@{n="Inheritance Status";e={$_.AreAccessRulesProtected}} | Export-Csv ./ParentfolderInheritance.csv -NoTypeInformation -Append

(Get-Acl -Path $rootpath).Access | Select @{n="Path";e={$rootpath}},IdentityReference,FileSystemRights,AccessControlType |Export-Csv ./ParentfoldersACL.csv -NoTypeInformation -Append

    $subfolders = Get-ChildItem -Path $rootpath

     foreach ($path in $subfolders)

    {

    try{

    Get-Acl -Path $path.FullName  |  Select Path,Owner,@{n="Inheritance Status";e={$_.AreAccessRulesProtected}} | Export-Csv ./SubfoldersInheritance.csv -NoTypeInformation -Append

     }

     catch{   

        $rootpath | Select @{n="Rootfolder";e={$rootpath}},@{n="Errorinfo";e={"$path not accessible under $rootpath"}} | Export-Csv ./Errorlogs.csv -NoTypeInformation -Append

        }

    (Get-Acl -Path $path.FullName).Access | Select @{n="Path";e={$path.FullName}},IdentityReference,FileSystemRights,AccessControlType | Export-Csv ./SubfoldersACL.csv -NoTypeInformation -Append

    }

}

 

Active Directory - Auditing File Share on a Windows Server

 

Powershell Script - Finding out time Source of all the DC's in the domain

<#Created By Abhishek Bansal

Read Note 

Script Usage :: Useful in fetching sync time source for all the domain controllers of the domain.

Pre requisites :: Copy all the code into a text file, save it with an extension ".PS1". Once saved, run it as Administrator.

Execution & Outputs :: Once executed, there will be two files created as Timesyncdetails.csv containing output and Errorlogs.csv for any errors. #>


$dcs = (Get-ADDomainController -Filter *).Name

Write-Host -ForegroundColor Green "$((Get-ADDomain).PDCEmulator) is holding PDC role.."

$line = 0

$linecount = $dcs.Count

$pct = 0

foreach($dc in $dcs)

{

    $line++

    $dc = $dc.Trim()

    $pct = $line/$linecount * 100

    try{

    $error.Clear()

    Write-Progress -Activity " " -PercentComplete $pct

    Invoke-Command -ComputerName $dc -ScriptBlock{"`nFetching Sync time for $($using:dc)"} -ErrorAction Stop

    $dc | Select-Object -Property @{n="Hostname";e={$dc}},@{n="Source";e={Invoke-Command -ComputerName $dc -ScriptBlock{w32tm /query /source}}} | Export-Csv ./Timesyncdetails.csv -NoTypeInformation -Append

    }

    catch{

    $dc | Select-Object -Property @{n="Hostname";e={$dc}},@{n="ErrorInfo";e={$($error.exception.Message)}} | Export-Csv ./Errorlogs.csv -NoTypeInformation -Append

    }

}

Comparing Windows Services Status Prior and Post Reboot

<#Created By Abhishek Bansal

Read Note 

Script Usage :: Validation Script, Useful in Comparing Windows Services Status before & after reboot.

Pre requisites :: Copy all the code into a text file, save it with an extension ".PS1". Once saved, run it as Administrator. You need to run this script twice, first prior reboot with Option 1 and second time will be after rebooting with option 2.

Execution & Outputs :: Once executed, there will be two files created as BeforeRestart.csv containing Services status before reboot & one with name AfterRestart.csv containing Services status post reboot. Differences among both the files will be visible directly on the console in Red color. #>


Write-Host -ForegroundColor Yellow   "`nPress 1 to fetch services status before reboot"

Write-Host -ForegroundColor Yellow  "Press 2 to fetch services status after reboot & proceed with validations.."

$choice = Read-Host "`nEnter your choice = "

if($choice -eq 1)

    {

    Get-Service | Select Name,DisplayName,Status | Export-Csv ./BeforeRestart.csv -NoTypeInformation

    }

    elseif($choice -eq 2)

    {

    Get-Service | Select Name,DisplayName,Status | Export-Csv ./AfterRestart.csv -NoTypeInformation


    $Beforerestartdata = Import-Csv .\BeforeRestart.csv

    $Afterrestartdata = Import-Csv .\AfterRestart.csv


#Comparing Services.....


foreach($row in $Beforerestartdata)

{

    foreach($row1 in $Afterrestartdata)

    {

           if($($row.Name) -eq $($row1.Name))

           {

                if($($row.Status) -eq $($row1.Status))

                {

                 Write-Host "$($row.Name) seems fine" -ForegroundColor Green    

                }


                else

                {

                

                Write-Host "$($row.DisplayName) service is having differences. Before Reboot Status was $($row.Status) and after reboot status is $($row1.Status)" -ForegroundColor Red

                

                }

           }


           else

           {

            continue

           }

           

    }


}

        }

    else

    {

    Write-Host "Invalid Choice..."

    }


Powershell Script - Comparing Policies sub folders with GP

  <#Created By - Abhishek Bansal

Read Me !!

Script Usage - This script will compare sub folder of Policies folder inside Sysvol for every DC with the Group Policy configured in GPMC

Once it compares, it will list all the Policy folders which are mapped to GPMC and show as "Valid GPO Folder" and Policy folder for any non existing Group Policy would be shows as "Not valid GPO folder .#>


$gpoid = Get-GPO -All

$dcs = (Get-ADDomainController -Filter *).Name

foreach($dc in $dcs)

{

    if($(Test-Path -Path "\\$dc\sysvol\Mari.com\Policies")-eq $true)

    {

    $Sysvolgpos = $(Get-ChildItem -Path "\\$dc\sysvol\Mari.com\Policies" -Exclude "*PolicyDefin*").Name

            $arr = @()   

                                foreach($Sysvolgpo in $Sysvolgpos)

                        {

                              foreach($gpo in $gpoid)

                                {

                                    $gpoingpmc = "{$($gpo.id)}"

                                    if($($gpoingpmc -eq $Sysvolgpo))

                                        {

                                        $arr += $gpoingpmc

                                        break

                                            }

                                   }

                }

        }

$Sysvolgpos | Where {$arr -Contains $_} | Select-Object -Property @{n="Domain Controller";e={$dc}},@{n="GPO Folder";e={$_}},@{n="Status";e={"Valid GPO folder"}}

$Sysvolgpos | Where {$arr -NotContains $_} | Select-Object -Property @{n="Domain Controller";e={$dc}},@{n="GPO Folder";e={$_}},@{n="Status";e={"Not valid GPO folder"}}

}


Sample Output












Fetching Event Logging Mode on Windows Servers

<#Created By Abhishek Bansal

Read Note 

Script Usage :: Want to check what logging mode is configured for events like System , Setup, Application , Security logs for all your servers ?? What' the current size of all the events contained in these logs ?? What's the maximum log size of these events ?? For all this, use below script.

Pre requisites :: Copy all the code into a text file, save it with an extension ".PS1". On same location create a text file named "InputServers.txt" which will be containing names of machines. Once saved, run script as Administrator.

Execution & Outputs :: Once executed Output will be saved in a file named "LoggingmodeOutput.csv" and any Errors into "Errorslogs.csv" onto same location. #>


$servers = Get-Content .\InputServers.txt

foreach($server in $servers)

{

$server = $server.trim()

$Error.Clear()

    try{

    Invoke-Command -ComputerName $server -ErrorAction Stop -ScriptBlock{Get-WinEvent -ListLog Application,Setup,System,Security | Select-Object @{n="Hostname";e={$using:server}},LogName,LastAccessTime,LastWriteTime,@{n="MaximumLogSize(MB)";e={[Math]::Round($($_.MaximumSizeInBytes)/1024/1024,1)}},@{n="CurrentEventSize(MB)";e={[Math]::Round($($_.FileSize)/1024/1024,1)}},@{n="Events Count";e={$_.RecordCount}},@{n="LoggingMode";e={$(if($_.Logmode -eq "Circular"){echo "Overwrite events as needed (Oldest events first)"}elseif($_.Logmode  -eq "Retain"){echo "Do not overwrite events (Clear logs manually)"}elseif($_.Logmode  -eq "AutoBackup"){echo "Archive the log when full, do not overwrite events)"})}},LogFilePath} | Export-Csv ./LoggingmodeOutput.csv -NoTypeInformation -Append

        }

    catch

    {

    $server | Select-Object @{n="Hostname";e={$server}},@{n="ErrorMessage";e={$($Error.Exception.Message)}} | Export-Csv ./Errorlogs.csv -NoTypeInformation -Append

    }

}


Sample Output 






























All Blogs Links By Category

Category

Links

Active Directory

Active Directory - (2148074274) The Target principal name is incorrect on Domain Controller while running Repadmin.

Active Directory

Active Directory - Controlling & Reducing Communication to PDC b/w Sites

Active Directory

Active Directory - Last Logon vs Last Logon Timestamp Attribute

Active Directory

Active Directory - Delegation of Control

Active Directory

Part 1 - Delegating rights to Manage Membership of an AD Group

Active Directory

Part 2 - Delegation of Control | Revoking Rights

Active Directory

Part 3 - Delegating access to Unlock User account in Active Directory

Active Directory

DNS - Backing up & Restoring AD Integrated Zone

Active Directory

Foreign Security Principals ? Identifying Stale FSP & cleaning them from AD

Active Directory

Active Directory - Updating DFS Referrals for the client

Active Directory

Active Directory - Difference in Selective & Forest Wide Authentication in AD Trust

Active Directory

Active Directory - Quick LAB - Resetting DSRM Password on a DC

Active Directory

Active Directory - Setting up Conditional Forwarder between domains in different forest

Active Directory

Active Directory - Setting up AD Trust between Domains

Active Directory

DHCP - Cleaning up Stale DHCP Server Records from Configuration Partition.

Active Directory

Delegating User rights to manage a specific DNS Zone

Active Directory

Active Directory - Editing ADDS Schema

Active Directory

Restoring Deleted User Object from AD Recycle Bin via Powershell

Active Directory

Enabling AD Recycle Bin throwing Error - A referral was returned from the server

Active Directory

Troubleshooting - DC Promotion Failing. Access is denied.

Active Directory

Active Directory - Disabling / Enabling Outbound or Inbound Replication on Domain Controllers

Active Directory

Active Directory - Disabling / Enabling Outbound or Inbound Replication on Domain Controllers

Active Directory

Non-Authoritative Synchronization for DFSR-replicated Sysvol

Active Directory

Moving FSMO Roles via Command line

Active Directory

Setting up Conditional Forwarders ?

Active Directory

Difference - DNS Conditional Forwarders & Forwarders ?

Active Directory

Lost and Found in Active Directory ?

Active Directory

Setting up Additional Domain Controller using IFM ( Install From Media)

Active Directory

Lingering Objects in Active Directory

Entra ID

How to Enable Pass Through Authentication and Testing its working with a Use case

Entra ID

Uninstalling Azure AD Connect Completely

Entra ID

Why highly Priviledged Onpremise Groups doesn't Sync to Entra ID ?

Entra ID

Entra ID - Unable to delete Security Group part of Administrative Unit Restricted Management

Entra ID

Syncing / Unsyncing OU's to Entra ID using Azure AD Sync Service Manager

Entra ID

Syncing Custom Attributes to Entra ID

Entra ID

Refreshing Directory Schema - Azure AD Connect

Entra ID

Domain Filtering from Azure AD Connect

Entra ID

Entra ID - Completed-export-errors while Syncing

Entra ID

Entra ID - Domain Filtering from Azure AD Connect

Entra ID

Blocking User to Use MFA - Entra ID

Entra ID

Troubleshooting Password Hash Sync Issue - Entra ID

Entra ID

Stop Syncing Onprem AD Users to Entra ID using Sync Rule Editor

Entra ID

Stopped-extension-DLL-exception / no-start-ma Error

Entra ID

Stopped-deletion-threshold-exceeded error while running Azure AD Sync

Entra ID

Syncing / Unsyncing an OU from Azure AD Connect

Group Policy

Group Policy Error - "The Permissions for this GPO in Sysvol folder are Inconsistent with those in Active Directory"

Group Policy

Group Policy - Processing of Multiple GPOs linked on Same OU

Group Policy

Group Policy Preferences - Apply once and do not reapply Setting

Group Policy

Group Policy - Domain Group Policy Overrides the Local Group Policy

Group Policy

Group Policy Preference Items - Stop Processing Items in this extension if an error occurs

Group Policy

Group Policy - Denying applying Policy for set of users.

Group Policy

Group Policy - Applying GPO only on DC holding PDC Emulator

Group Policy

Group Policy - Interactive logon: Display user information when the session is locked

Group Policy

Group Policy - Displaying a Custom Message before Server login

Group Policy

Group Policy - Accounts: Rename administrator account

Group Policy

Group Policy - Interactive log on: Prompt the user to change passwords before expiration

Group Policy

Group Policy - Security Concern in Security GPO

Group Policy

Fix - Software Installation via GPO Error code %%1274

Group Policy

GPO - The Interactive logon: Number of previous logons to cache (in case domain controller is not available)

Group Policy

Difference in Gpupdate vs Gpupdate Force

Group Policy

Powershell Script - Exporting GPO Settings in HTML

Group Policy

Powershell Script - Listing Empty GPOs

Powershell

Powershell Script - Comparing Policies sub folders with GP

Powershell

Fetching Event Logging Mode on Windows Servers

Powershell

Powershell Script - Disabling IPv6 on Windows Servers

Powershell

Powershell Script - Fetching AD Infra Details

Powershell

Powershell Script - Adding Bulk Users in an AD Group

Powershell

Powershell Script - Fetching User details from an Input file containing Email Id's of users - AD

Powershell

Powershell Script - Fetching User Membership from Active Directory

Powershell

Powershell Script - Fetching AD Computer Details

Powershell

Powershell Script - Fetching AD Computer Details

Powershell

Powershell Script - Identifying Disabled ID's in AD & Moving them in Disabled OU - Cleanup Project

Powershell

Powershell Script - Fetch membership of multiple AD Groups at once.

Powershell

Powershell Script - AD User Account & Password related details

Powershell

Powershell Script - New AD Groups Creation from .CSV File

Powershell

Powershell Script - Checking SMB1 Feature Status on Windows Servers

Powershell

Powershell Script - Windows Servers User Profile Status Check :: Cleanup Project

Powershell

Powershell Script - Exporting GPO Settings in HTML

Powershell

Powershell Script - Finding Group Membership differences b/w two ID's in AD

Powershell

Powershell Script - Removing Members (Users / Groups) from AD Group.

Powershell

Powershell Script - Fetching LAPS Password from AD

Powershell

Powershell Script - KB Installation Status on Windows Servers / Clients.

Powershell

Powershell Script - Listing Empty GPOs

Powershell

Powershell Script - Fetching AD Group Details

Powershell

Powershell Script - Fetching User details along with their Manager details from AD.

Powershell

Powershell Script - Export AD Group Membership containing large members

Powershell

Powershell Script - Creating New AD Groups

Powershell

Powershell Script - Remove Computer Objects from Active Directory

Vmware

Registering VM via Command Line

Vmware

Mounting Disk of One VM to Another VM

Vmware

Disk Modes - Dependent Vs Independent

Vmware

Fixing Remove Permission Failed Error from Esxi

Vmware

Difference in Template & Cloning

Windows

Fix - Error 2149842967 while installing cumulative security update on Windows Server

Windows

Windows Servers - Configuring Page File

Windows

Offline .Net Upgrade / Installation

Windows

RDS - Removing Invalid Collection from RD Web Access

Windows

Patch Installation via Command Line

Windows

Windows Admin Center - Part 1 Download & Installation

Windows

Windows Admin Center - Part 2 || Configuring WAC, Adding & Managing Servers

Windows

.Net 3.5 Installation Error. Source File not found

Windows

Logical Ports in Windows

Windows

Reliability Monitor

Windows

Resetting Windows Local Admin Password Using Utilman.exe Utility