🔧 PowerShell Knowledge Base

Comprehensive Command Reference and Syntax Guide

    ⚠️ Warning — Read Before Executing Any Command

    The commands in this reference should only be run with a full understanding of their effect. PowerShell commands, especially those modifying the registry, execution policy, user permissions, or system settings can cause irreversible system issues or data loss if misused.

    📋 Quick Navigation

    🗝️ Legend & Notes

    📖 Legend
    Purple Text: Represents variables or values to be replaced with your specific data.
    Italic/Description: Explanation of what the command does or its purpose.

    📝 Notes
    📘 Execution Policies Read the PowerShell Fundamentals section first for Get-ExecutionPolicy and Set-ExecutionPolicy commands. For full policy definitions, scope precedence, and security guidance see the Microsoft Docs — About Execution Policies ↗.
    🔐 RunAs & Credential Commands: Commands requiring alternate credentials or elevated access are in the RunAs & Credentials section — covers runas, Get-Credential, Start-Process as another user, and interactive remote sessions.
    📄 Microsoft Docs: Each section heading has a MS Docs button. Click it to expand official Microsoft documentation links for that section's commands. These open in a new tab.

    🎯 PowerShell Fundamentals

    PowerShell is Microsoft's scripting and automation framework. It works with objects, making it easy to chain commands together.

    Getting Help & Information

    🔹
    Get-Command
    Lists all available commands.
    🔹
    Get-Command -Module $Module
    Lists commands from a specific module.
    🔹
    Get-Help -Name $Command
    Shows full help for a command.
    🔹
    Get-Help -Name $Command -Parameter $Parameter
    Shows help for a specific parameter.
    🔹
    Get-Command | Get-Member
    Shows all properties and methods of an object. Alias: gm
    🔹
    $PSVersionTable
    Shows current PowerShell version info.
    🔹
    Get-ExecutionPolicy -List
    Shows execution policies for each scope.
    🔹
    Set-ExecutionPolicy -ExecutionPolicy $Policy -Scope $Scope
    Sets the execution policy.
    Note: RemoteSigned requires downloaded scripts to be signed. Unrestricted allows all scripts. Reset after use or scope to a single session.

    📦 Variables & Data Types

    Variables use the $ prefix. PowerShell handles type conversion automatically in most cases.

    Variable Declaration & Assignment

    🔹
    $variableName = value
    Creates and assigns a variable. No prior declaration needed.
    🔹
    [datatype] $variableName = value
    Creates a strongly typed variable.
    🔹
    Get-Variable
    Lists all variables in scope.
    🔹
    New-Variable -Name $Name -Value $Value -Option ReadOnly
    Creates a variable with optional attributes like ReadOnly.
    🔹
    Remove-Variable -Name $Name
    Deletes a variable. Use -Force for ReadOnly.

    Data Types & Type Casting

    Type Description Example
    [int] 32-bit integer $num = 42
    [string] Text string $name = "PowerShell"
    [bool] Boolean (True/False) $flag = $true
    [array] Collection of items $list = @(1,2,3)
    [hashtable] Key-value pairs $map = @{key="value"}
    [float]/[double] Floating-point numbers $pi = 3.14159
    🔹
    $variable -is [type]  # Check if value is of a type
    Checks if a variable matches a given type.
    🔹
    [int]$result = 5 / 3  # Forces integer result
    Casts a value to a specific type.

    String Interpolation

    🔹
    "Hello $name"  # Variable interpolation with double quotes
    Double quotes expand variables. Single quotes treat everything as literal.
    🔹
    "{0} is {1}" -f $firstName, $lastName
    Formats a string using indexed placeholders.

    ⚙️ Operators & Comparisons

    Arithmetic Operators

    Operator Description Example
    + Addition $a + $b
    - Subtraction $a - $b
    * Multiplication $a * $b
    / Division (returns float) $a / $b
    % Modulo (remainder) 7 % 3 # Returns 1

    Comparison Operators

    Operator Description Example
    -eq Equals $a -eq $b
    -ne Not equals $a -ne $b
    -lt Less than $a -lt 10
    -le Less than or equal $a -le 10
    -gt Greater than $a -gt 5
    -ge Greater than or equal $a -ge 5

    Logical & String Operators

    Operator Description Example
    -and Logical AND $true -and $false # $false
    -or Logical OR $false -or $true # $true
    -not / ! Logical NOT -not $true # $false
    -like Wildcard pattern match "test" -like "t*" # $true
    -match Regular expression match "test" -match "^t" # $true
    -in Check if in array 1 -in @(1,2,3) # $true
    -contains Array contains value @(1,2,3) -contains 2 # $true

    Assignment Operators

    🔹
    $a = 5           # Basic assignment
    $a += 1          # Add and assign (increment)
    $a -= 1          # Subtract and assign (decrement)
    $a *= 2          # Multiply and assign
    $a /= 2          # Divide and assign
    Assignment operators allow shorthand for modifying variable values.

    Ternary Operator (PowerShell 7+)

    🔹
    $result = $condition ? "yes" : "no"
    The ternary operator provides a shorthand for if-else statements. Returns first value if true, second if false.

    🔀 Control Flow & Logic

    If-ElseIf-Else Statements

    🔹
    if ($condition) {
        # Do something
    } elseif ($otherCondition) {
        # Do something else
    } else {
        # Default action
    }
    Runs code conditionally. Use -eq, -lt, -gt etc. for comparisons.

    Switch Statements

    🔹
    switch ($value) {
        'option1' { "First choice"; break }
        'option2' { "Second choice"; break }
        default { "Default case" }
    }
    Matches a value against cases. Use break to stop fall-through.
    🔹
    switch -regex ($array) {
        '^[0-9]' { "Starts with number" }
        '[a-z]' { "Contains lowercase" }
    }
    Matches array elements using regex patterns.

    For Loops

    🔹
    for ($i = 0; $i -lt 10; $i++) {
        Write-Output $i
    }
    Index-based loop with full control over start, end, and step.

    ForEach Loops

    🔹
    foreach ($item in $collection) {
        Write-Output $item
    }
    Loops over each item in a collection.
    🔹
    $collection | ForEach-Object { Write-Output $_ }
    Pipeline equivalent of foreach. Use $_ for the current item.

    While Loops

    🔹
    while ($condition) {
        # Do something
        $count++
    }
    Loops while a condition is true. May not run if condition starts false.
    🔹
    do {
        # Do something (at least once)
    } while ($condition)
    Like while, but always runs at least once.

    Flow Control Keywords

    🔹
    break      # Exit the current loop or switch
    continue   # Skip to next iteration of loop
    return     # Exit function and return value
    Controls loop and function execution flow.

    Parameter Attributes

    Attribute Description Example
    Mandatory=$true Parameter is required [Parameter(Mandatory=$true)]
    ValueFromPipeline=$true Accept input from pipeline [Parameter(ValueFromPipeline=$true)]
    ValidateSet Restrict to specific values [ValidateSet('option1','option2')]
    ValidateRange Restrict numeric range [ValidateRange(1,100)]
    Alias Alternative parameter name [Alias('ComputerName')]

    📦 Modules & Imports

    Module Management

    🔹
    Get-Module -ListAvailable
    Lists all installed modules on the system.
    🔹
    Get-Module
    Shows modules loaded in the current session.
    🔹
    Import-Module -Name $Module
    Loads a module into the current session.
    🔹
    Remove-Module -Name $Module
    Unloads a module from the session.
    🔹
    Get-Command -Module $Module
    Shows all commands in a module.
    🔹
    Find-Module -Name $Module
    Searches PowerShell Gallery by name.
    🔹
    Find-Module -Tag $Tag
    Searches PowerShell Gallery by tag.
    🔹
    Install-Module -Name $Module -Scope CurrentUser -Force
    Installs a module. CurrentUser scope doesn't need admin.
    🔹
    Install-Module -Name $Module -RequiredVersion $Version
    Installs a specific module version.

    📁 File System Operations

    Basic File Operations

    🔹
    Get-ChildItem -Path $Path
    Lists files and folders at the given path. Alias: ls, dir
    🔹
    Get-ChildItem -Path $Path -Recurse
    Recursively lists all files and subfolders.
    🔹
    New-Item -Path $Path -ItemType Directory
    Creates a new folder.
    🔹
    New-Item -Path $Path -ItemType File
    Creates a new empty file.
    🔹
    Remove-Item -Path $Path
    Deletes a file or folder. Use -Force for read-only items.
    🔹
    Remove-Item -Path $Path -Recurse
    Deletes a folder and all its contents.

    File Content Operations

    🔹
    Get-Content -Path $Path
    Reads a file's contents.
    🔹
    Set-Content -Path $Path -Value $Content
    Overwrites a file with new content.
    🔹
    Add-Content -Path $Path -Value $Line
    Appends to a file without overwriting.
    🔹
    Copy-Item -Path $Source -Destination $Dest -Recurse
    Copies a file or folder. Use -Recurse for folders.
    🔹
    Move-Item -Path $Source -Destination $Dest
    Moves or renames a file or folder.

    📧 Exchange & Mailbox Management

    Manage Exchange Online mailboxes and permissions. Requires the ExchangeOnlineManagement module.

    Connection & Authentication

    🔹
    Import-Module ExchangeOnlineManagement
    Loads the Exchange Online module.
    🔹
    Connect-ExchangeOnline -UserPrincipalName $UPN
    Connects to Exchange Online.
    🔹
    $UserCredential = Get-Credential
    Connect-ExchangeOnline -UserPrincipalName $UserCredential.UserName -ShowProgress $true
    Connects using stored credentials with progress output.
    🔹
    Disconnect-ExchangeOnline -Confirm:$false
    Disconnects from Exchange Online.

    Mailbox Information

    🔹
    Get-Mailbox -Identity $Identity | Select-Object DisplayName, RecipientType
    Gets mailbox details for a user.
    🔹
    Get-MailboxStatistics -Identity $Identity | Select-Object DisplayName, TotalItemSize
    Returns the total mailbox size.
    🔹
    Get-MailboxStatistics -Identity $Identity | Select-Object DisplayName, ArchiveStatus, ArchiveSize
    Returns archive size and status.

    Mailbox Permissions & Delegation

    🔹
    Add-MailboxPermission -Identity $Identity -User $Delegate -AccessRights FullAccess -InheritanceType All
    Grants another user full access to a mailbox.
    🔹
    Get-MailboxPermission -Identity $Identity
    Shows who has access to a mailbox.
    🔹
    Remove-MailboxPermission -Identity $Identity -User $Delegate -AccessRights FullAccess -Confirm:$false
    Revokes a user's mailbox access.

    Calendar & MailTip Configuration

    🔹
    Set-MailboxCalendarConfiguration -Identity $Identity -PublishEnabled $true -AddOrganizerToSubject $false
    Updates calendar sharing settings.
    🔹
    Set-Mailbox -Identity $MailboxEmailAddress -MailTip $MailtipMessage
    Sets a MailTip shown to senders.

    Archive Management

    🔹
    Set-Mailbox [email protected] -ArchiveQuota unlimited -ArchiveWarningQuota unlimited
    Sets the archive quota to unlimited.
    🔹
    Enable-Mailbox -Identity $Identity -Archive
    Enables a user's archive mailbox.

    ☁️ OneDrive Management

    Commands for managing and troubleshooting the OneDrive client on Windows.

    OneDrive Service & Process Management

    Note: The OneDrive executable path changes depending on the Windows version and install type. If the path below fails, find the correct one via Task Manager → Details tab, right-click OneDrive.exeOpen file location.
    🔹
    Start-Process "$env:LOCALAPPDATA\Microsoft\OneDrive\OneDrive.exe" /reset
    Resets OneDrive using the most common per-user install path. Works on most Windows 10/11 machines.
    🔹
    Start-Process "C:\Program Files (x86)\Microsoft OneDrive\onedrive.exe" /reset
    Resets OneDrive (x86 install path — common on older or 32-bit installs).
    🔹
    taskkill /f /im OneDrive.exe
    Force-kills OneDrive. Run before uninstalling.

    OneDrive Configuration

    🔹
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\OneDrive" -Name "UserUpn" -Value $UPN
    Sets the OneDrive UPN in the registry.

    OneDrive Troubleshooting

    🔹
    Get-ChildItem -Path $Path -Recurse | Where-Object { $_.FullName.Length -gt 260 }
    Finds files with paths over 260 characters.
    🔹
    Start-Process "C:\Program Files (x86)\Microsoft OneDrive\onedrive.exe"
    Starts the OneDrive application.

    OneDrive Uninstallation

    🔹
    %systemroot%\SysWOW64\OneDriveSetup.exe /uninstall
    Uninstalls OneDrive. Terminate OneDrive.exe first.

    🌐 Networking & Connectivity

    Cmdlets for IP configuration, adapter management, and connectivity testing.

    IP Address Configuration

    🔹
    Get-NetIPAddress
    Lists all IP addresses on the machine.
    🔹
    New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.100 -PrefixLength 24
    Assigns a new IP address.
    🔹
    Set-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.10 -PrefixLength 24
    Updates an existing IP address.
    🔹
    Set-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.10 -DefaultGateway 192.168.1.1
    Sets IP address and default gateway.

    Network Adapter Management

    🔹
    Get-NetAdapter
    Lists all network adapters and their status.
    🔹
    Get-NetAdapter -Name "Ethernet" | Set-NetAdapter -Enabled $true
    Enables or disables a network adapter.

    Connectivity Testing

    🔹
    Test-NetConnection -ComputerName $Host
    Pings a host and tests DNS resolution.
    🔹
    Test-NetConnection -ComputerName $Host -Port $Port
    Tests connectivity to a host on a specific port.
    🔹
    Test-NetConnection -ComputerName $Host -Port 443 -InformationLevel Detailed
    Returns detailed diagnostics including routing and latency.

    Wireless Diagnostics

    🔹
    wlanreport
    Generates an HTML wireless diagnostic report.

    Traceroute

    🔹
    Test-NetConnection -ComputerName $Host -TraceRoute
    Traces each hop to a destination. PowerShell equivalent of tracert.
    🔹
    tracert $Host
    Classic CMD traceroute — also runs inside PowerShell.

    DNS Resolution

    🔹
    Resolve-DnsName -Name $Hostname
    Resolves a DNS name to IP. PowerShell equivalent of nslookup.
    🔹
    Resolve-DnsName -Name $Hostname -Server $DnsServer
    Queries a specific DNS server — useful for testing split DNS.
    🔹
    Clear-DnsClientCache
    Flushes the local DNS cache. Equivalent of ipconfig /flushdns.
    🔹
    Get-DnsClientCache
    Shows all currently cached DNS entries on the machine.

    Firewall

    🔹
    Get-NetFirewallRule | Where-Object { $_.Enabled -eq 'True' }
    Lists all enabled firewall rules.
    🔹
    New-NetFirewallRule -DisplayName $RuleName -Direction Inbound -Protocol TCP -LocalPort $Port -Action Allow
    Creates an inbound firewall allow rule for a TCP port.
    🔹
    Remove-NetFirewallRule -DisplayName $RuleName
    Removes a firewall rule by display name.

    ⚡ Windows Power & Settings

    Commands for managing power plans, sleep, hibernate, and related Windows settings.

    View & Switch Power Plans

    🔹
    powercfg /list
    Lists all power plans and their GUIDs.
    🔹
    powercfg /getactivescheme
    Shows the active power plan.
    🔹
    powercfg /setactive $SchemeGUID
    Activates a power plan by GUID.
    PlanGUID
    Balanced381b4222-f694-41f0-9685-ff5bb260df2e
    High Performance8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
    Power Savera1841308-3541-4fab-bc81-f71556f20b4a
    🔹
    powercfg -restoredefaultschemes
    Restores default Windows power plans.
    🔹
    powercfg /export $PlanPath $SchemeGUID
    powercfg /import $PlanPath
    Exports a power plan to file; import on another machine.

    Sleep, Hibernate & Timeout Settings

    🔹
    powercfg /hibernate off
    Disables hibernate and removes hiberfil.sys.
    🔹
    powercfg /hibernate on
    Re-enables hibernate. Required for Fast Startup.
    🔹
    powercfg /change standby-timeout-ac $minutes
    powercfg /change standby-timeout-dc $minutes
    Sets sleep timeout for both AC (plugged in) and battery.
    🔹
    powercfg /change monitor-timeout-ac $minutes
    powercfg /change monitor-timeout-dc $minutes
    Sets screen-off timeout for both AC and battery.
    🔹
    powercfg /change disk-timeout-ac $minutes
    powercfg /change disk-timeout-dc $minutes
    Sets disk spin-down timeout for both AC and battery.
    🔹
    powercfg /change hibernate-timeout-ac $minutes
    powercfg /change hibernate-timeout-dc $minutes
    Sets the delay before sleep transitions to hibernate.

    Fast Startup & Shutdown

    🔹
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f
    Disables Fast Startup. Ensures a full power cycle on shutdown.
    🔹
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 1 /f
    Re-enables Fast Startup. Requires hibernate to be on.
    🔹
    reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled
    Checks Fast Startup state: 0x0 = off, 0x1 = on.

    USB & NIC Power Management

    🔹
    powercfg /setacvalueindex SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0 powercfg /setactive SCHEME_CURRENT
    Disables USB selective suspend on AC power. Stops peripherals from dropping.
    🔹
    Get-NetAdapter -Name $Adapter | Set-NetAdapterPowerManagement -WakeOnMagicPacket Disabled -WakeOnPattern Disabled -SelectiveSuspend Disabled
    powercfg /setactive SCHEME_CURRENT
    Disables NIC power saving. Prevents RDP and Teams disconnects.
    🔹
    $nics = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
    foreach ($nic in $nics) {
        Set-NetAdapterPowerManagement -Name $nic.Name -WakeOnMagicPacket Disabled -WakeOnPattern Disabled -ErrorAction SilentlyContinue
    }
    powercfg /setactive SCHEME_CURRENT
    Disables Wake-on-LAN on all active NICs.

    Screen Lock & Idle Settings

    🔹
    reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d $Seconds /f
    Sets screen saver idle timeout in seconds.
    🔹
    reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 0 /f
    Disables the screen saver.
    🔹
    powercfg /setacvalueindex SCHEME_CURRENT SUB_VIDEO VIDEOIDLE $Seconds
    powercfg /setactive SCHEME_CURRENT
    Sets display-off timeout.
    🔹
    reg add "HKLM\Software\Policies\Microsoft\Windows\Personalization" /v NoLockScreen /t REG_DWORD /d 1 /f
    Hides the lock screen on sign-in and wake. Does not remove the password prompt.
    🔹
    powercfg /setacvalueindex SCHEME_CURRENT SUB_NONE CONSOLELOCK 0
    powercfg /setactive SCHEME_CURRENT
    Disables the password-on-wake requirement for AC power.

    Windows Update & M365 Background Issues

    🔹
    reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization" /v DODownloadMode /t REG_DWORD /d 0 /f
    Disables Delivery Optimisation P2P bandwidth usage.
    🔹
    reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursStart /t REG_DWORD /d $StartHour /f
    reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursEnd   /t REG_DWORD /d $EndHour   /f
    Sets Windows Update active hours.
    🔹
    reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoRebootWithLoggedOnUsers /t REG_DWORD /d 1 /f
    Prevents automatic reboots while a user is logged in.
    🔹
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications\MSTeams_PackageID" /v Disabled /t REG_DWORD /d 0 /f
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications\MSTeams_PackageID" /v DisabledByUser /t REG_DWORD /d 0 /f
    Stops Battery Saver from suspending Teams, preventing missed calls.
    🔹
    Get-Process -Name OneDrive -ErrorAction SilentlyContinue | Select-Object Name, CPU, WorkingSet
    Checks if OneDrive is running. High CPU may indicate a stuck sync.
    🔹
    Stop-Process -Name OneDrive -Force -ErrorAction SilentlyContinue
    Start-Sleep -Seconds 3
    Start-Process "C:\Users\username\AppData\Local\Microsoft\OneDrive\OneDrive.exe"
    Restarts OneDrive to fix stuck sync.

    Power Diagnostics & Reporting

    🔹
    powercfg /energy /output $Output
    Runs a 60-second trace and outputs an HTML power diagnostics report.
    🔹
    powercfg /sleepstudy /output $Output
    Generates a 3-day sleep history report.
    🔹
    powercfg /requests
    Shows processes currently preventing sleep.
    🔹
    powercfg /waketimers
    Lists wake timers that will wake the machine from sleep.
    🔹
    powercfg /lastwake
    Shows what last woke the machine.
    🔹
    powercfg /devicequery wake_armed
    Lists devices that are allowed to wake the system.
    🔹
    powercfg /batteryreport /output $Output
    Generates a battery health report including design vs actual capacity.

    🔐 Run As & Credentials

    Run commands or open sessions as a different user. Useful for IT admins needing to execute privileged commands without logging off, or authenticate against remote systems interactively.

    Run As in CMD / PowerShell

    🔹
    runas /user:$Domain\$User powershell.exe
    Opens a new PowerShell window as a different user. You are prompted for the password interactively.
    🔹
    runas /user:$Domain\$User /netonly powershell.exe
    /netonly — runs the process locally as your current user but uses the alternate credentials for all network connections. Ideal for accessing remote resources (AD, Exchange, file shares) without a full session switch.
    🔹
    runas /user:$Domain\$User cmd.exe
    Opens a CMD prompt as the specified user.

    Storing Credentials in PowerShell

    🔹
    $Cred = Get-Credential
    Prompts for a username and password and stores them as a PSCredential object. Pass $Cred into any cmdlet that accepts -Credential.
    🔹
    $Cred = Get-Credential -UserName $Username -Message "Enter admin credentials"
    Pre-fills the username in the prompt. Useful in scripts where the account is known but a secure password entry is still required.

    Start-Process As Another User

    🔹
    Start-Process powershell.exe -Credential $Cred -NoNewWindow
    Launches PowerShell as the credential user. Combine with -ArgumentList to run a specific command.
    🔹
    Start-Process powershell.exe -Credential $Cred -ArgumentList "-Command $Command"
    Runs a specific PowerShell command as another user in a new process.

    Interactive Remote Session

    🔹
    Enter-PSSession -ComputerName $Computer -Credential $Cred
    Opens a live interactive PowerShell session on a remote machine. Your prompt changes to the remote host — works like SSH for Windows.
    🔹
    Exit-PSSession
    Exits the interactive remote session and returns to your local shell.
    🔹
    Invoke-Command -ComputerName $Computer -Credential $Cred -ScriptBlock { $Commands }
    Runs commands on a remote machine non-interactively. Results are returned to your local session.
    🔹
    $Session = New-PSSession -ComputerName $Computer -Credential $Cred
    Invoke-Command -Session $Session -ScriptBlock { $Commands }
    Remove-PSSession $Session
    Creates a persistent reusable session, runs commands against it, then cleans up. More efficient than repeated one-off Invoke-Command calls.
    Note: WinRM must be enabled on the target machine for remote sessions. Run Enable-PSRemoting -Force on the remote machine as an administrator to enable it.

    📜 PS1 Scripts Library

    Add your .ps1 files below with a short description of what each one does.
    Saving generates a new HTML as these are saved within the file.
    Tags are formatted in exact naming convention broke by ", ".
    📂
    Drop .ps1 files here to add them
    You'll be prompted for a description and category tag

    📄 Remove App By Name.ps1

    12 scripts stored
    Filter:
    📄 Get-SystemInfo.ps1
    Outputs OS version, CPU, RAM and disk info to the console.
    # Get-SystemInfo.ps1
    # Outputs basic system information
    
    $os   = Get-CimInstance Win32_OperatingSystem
    $cpu  = Get-CimInstance Win32_Processor
    $disk = Get-PSDrive C
    
    Write-Host "OS:   $($os.Caption) $($os.Version)"
    Write-Host "CPU:  $($cpu.Name)"
    Write-Host "RAM:  $([math]::Round($os.TotalVisibleMemorySize/1MB, 1)) GB"
    Write-Host "Disk: $([math]::Round($disk.Used/1GB,1)) GB used of $([math]::Round(($disk.Used+$disk.Free)/1GB,1)) GB"
                        
    📄Hiberboot.ps1
    Turns off Hiberboot (Fastboot) Via Reg-Key
    $path = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power"
    $name = "HiberbootEnabled"
    
    Write-Host "Checking Fast Startup status (HiberbootEnabled) at $path..." -ForegroundColor Yellow
    $current = Get-ItemProperty -Path $path -Name $name -ErrorAction SilentlyContinue
    
    if ($current.$name -eq 1) {
        Write-Host "Fast Startup is ENABLED (value: $($current.$name)). Disabling..." -ForegroundColor Red
        Set-ItemProperty -Path $path -Name $name -Value 0
        Write-Host "SUCCESS: Set to 0. Restart required for full effect." -ForegroundColor Green
    } elseif ($current.$name -eq 0) {
        Write-Host "Fast Startup is already DISABLED (value: $($current.$name)). No changes needed." -ForegroundColor Green
    } else {
        Write-Host "Key not found or unexpected value ($($current.$name)). Skipping." -ForegroundColor Yellow
    }
    
    📄MailTip.ps1
    Example use of adding a MailTip.
    # Connect to Exchange Online 
    Connect-ExchangeOnline -UserPrincipalName "[email protected]" -ShowProgress $true
    
    # Specify the mailbox and MailTip message
    $MailboxEmailAddress = "[email protected]"
    $MailtipMessage = "This mailbox is monitored Mon-Fri, 9am-5pm. For urgent queries, call 0800 000 000."
    
    # Set the MailTip
    Set-Mailbox -Identity $MailboxEmailAddress -MailTip $MailtipMessage
    
    # Disconnect
    Disconnect-ExchangeOnline -Confirm:$false
    📄FileTimeConverter_fixed.ps1
    Converts file-time (raw data) to a legible date and vice-versa
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    # =========================
    # Native drag support
    # - Declare once; skip if already defined (re-runs in the same session)
    # =========================
    if (-not ("NativeMethods" -as [type])) {
        $sig = @"
    using System;
    using System.Runtime.InteropServices;
    public static class NativeMethods {
        public const int WM_NCLBUTTONDOWN = 0xA1;
        public const int HTCAPTION       = 0x2;
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    }
    "@
        Add-Type -TypeDefinition $sig -Language CSharp
    }
    
    # Helper scriptblock to initiate a native drag (call from MouseDown)
    $startDrag = {
        [NativeMethods]::ReleaseCapture() | Out-Null
        [NativeMethods]::SendMessage($form.Handle, [NativeMethods]::WM_NCLBUTTONDOWN, [NativeMethods]::HTCAPTION, 0) | Out-Null
    }
    
    # =========================
    # Theme colors to match banner
    # =========================
    $colorFormBg   = [System.Drawing.Color]::FromArgb(34,34,34)
    $colorPanelBg  = [System.Drawing.Color]::FromArgb(45,45,45)
    $colorText     = [System.Drawing.Color]::White
    $colorButton   = [System.Drawing.Color]::FromArgb(52,152,219)
    $colorModeOn   = [System.Drawing.Color]::FromArgb(200,200,200)
    $colorModeOff  = [System.Drawing.Color]::LightGray
    
    # =========================
    # Form (borderless, topmost)
    # =========================
    $form = New-Object System.Windows.Forms.Form
    $form.Text = ""
    $form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::None
    $form.StartPosition = "CenterScreen"
    $form.BackColor = $colorFormBg
    $form.Size = New-Object System.Drawing.Size(340, 280)
    $form.TopMost = $true
    
    # Let the bare form surface start a drag on left click
    $form.Add_MouseDown({
        param($s,$e)
        if ($e.Button -eq [System.Windows.Forms.MouseButtons]::Left) { & $startDrag }
    })
    
    # =========================
    # Banner (340px, 194px)
    # =========================
    $banner = New-Object System.Windows.Forms.PictureBox
    $banner.Location = New-Object System.Drawing.Point(0,0)
    $banner.Size     = New-Object System.Drawing.Size(340, 89)
    $banner.BackColor = [System.Drawing.Color]::Black
    $banner.SizeMode  = [System.Windows.Forms.PictureBoxSizeMode]::Zoom
    $banner.Anchor    = 'Top,Left,Right'
    
    # Embedded C5 Alliance logo (Base64 - self-contained)
    $logoB64 = @'
    /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQIBAQEBAQIBAQECAgICAgICAgIDAwQDAwMDAwICAwQDAwQEBAQEAgMFBQQEBQQEBAT/2wBDAQEBAQEBAQIBAQIEAwIDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAT/wAARCADbA0IDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD/AD/6ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAPoL4ZfArXfHjQ6rq2/QPCu3zftjQ/6fqMfT/RYvw/1svH/AF06UAfefhfwl4f8HaXDo/h/To7GziAEpT/j4vH6CWWb/lpJQB0dABQAUAFABQAUAFABQAUAfjPQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAa2k6Nqmvahb6VothcalqV3J5drZWkXnTzH2oA+4/hh+zrpWg/Zdc8cx22s62B5sejA+fpGnHnmUf8vEv/kH08z/AFlAH06q7RigB1ABQAUAFABQAUAFABQAUAFAH4z0AFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAev/Df4QeJviJOk1tF/ZegRTeVda/eRfuBj/lnFH/y0k9hQB9/+B/h34Z+H9gLTQrQfaZ4v9O1Scedqeo8k4llHQcn9yKAO6oAKACgAoAKACgAoAKACgAoAKACgD8Z6ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgC3a2tzezw21pDJcXU8vlW8EEfnTTP6AdaAPsX4Yfs3bhb698RIyBgS2vhaOUDOP8An8l/9pRZPuf9VQB9gWtra2FvDZ2dtb2dtbxeTa29vF5EEMf/AExioAsUAFABQAUAFABQAUAFABQAUAFABQAUAfjPQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQB6H4I+HXiX4gagLLQrDdbRv/AKfqk7GDStNHXMs34/6sfvDxxQB9/fDj4ReGvh3bpLbwnVfEDxmO5168j/ejOB5UMP8Ayzj4HPtQB6vQAUAFABQAUAFABQAUAFABQAUAFABQAUAFAH4z0AFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFADlXdQB9S/DD9nfU9f+za340WfRdEI82LTDmHVdQTIP73/n3j45z+8+Y4HQ0Afb2kaRpeg2Nvpmj2MGn6fax+XbWtrH5UTE8kmgDToAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA/GegAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDp/C/hTX/GWpx6R4e06fUbx8GQRoTb2qZ5lmlxiOMZ6mgD72+GPwH8PeBhb6rq4g13xQn7z7XLHnS9IcdPssUmOf+m0w7f8sqAPe6ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA/GegAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAPfvhj8C/EHjprfUtSD6H4Vf97/aUkOL7Uo+/wBkh9Of9cf3Y/6adKAPvXwr4S8PeC9LTR/D+mpYW8Y82WXrPeSDpLNN/wAtKAOloAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA/GegAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDV0nSNS1y/ttK0ezudS1K8k8q2srSLzp5j7UAfb3ww/Zy07RPs2t+OVg1nWP9ZFof8Ar9K01+uJh/y8Se3+p/660AfUe1E+RD5aR9fegB1ABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQB+M9ABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAeufDf4SeJfiNdJJaQ/2doUc3k3evXkf+jRHvHF/z0k9hQB+gHgX4c+Gfh9Y/ZNCswLy4ixfaxeDztT1Hv+9lHTqf3MNAHeUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAfjPQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQBctrea6nitrWGW4uJ5PKiggi86aV8/wDLMAZ9KAPr74Zfs2tKbfXPiJFJHHkSWnhe2lxNLgAD7XL/AO0osn3P+qIB9jWtrbWNvDZ2dtbWdnbxeVa29vF5EEEf/PKGGgCxQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAfjPQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUA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
    '@
    $logoBytes  = [System.Convert]::FromBase64String($logoB64.Trim())
    $logoStream = New-Object System.IO.MemoryStream(,$logoBytes)
    $logoBitmap = New-Object System.Drawing.Bitmap($logoStream)
    $banner.Image = $logoBitmap
    $form.Controls.Add($banner)
    
    # Allow dragging from the banner
    $banner.Add_MouseDown({
        param($s,$e)
        if ($e.Button -eq [System.Windows.Forms.MouseButtons]::Left) { & $startDrag }
    })
    
    # =========================
    # Close button (X), top-right
    # =========================
    $btnClose = New-Object System.Windows.Forms.Button
    $btnClose.Text = "X"
    $btnClose.Font = New-Object System.Drawing.Font("Segoe UI", 10, [System.Drawing.FontStyle]::Bold)
    $btnClose.Size = New-Object System.Drawing.Size(28, 24)
    $btnClose.FlatStyle = 'Flat'
    $btnClose.BackColor = [System.Drawing.Color]::FromArgb(30,30,30)
    $btnClose.ForeColor = [System.Drawing.Color]::White
    $btnClose.TabStop = $false
    $btnClose.Anchor = 'Top,Right'
    $btnClose.Add_Click({ $form.Close() })
    $form.Controls.Add($btnClose)
    
    # Position and z-order of the close button after form is shown
    $form.Add_Shown({
        $btnClose.Location = New-Object System.Drawing.Point(($form.ClientSize.Width - 30), 4)
        $btnClose.BringToFront()
    })
    
    # =========================
    # Content panel under the banner
    # =========================
    $panel = New-Object System.Windows.Forms.Panel
    $panel.Location = New-Object System.Drawing.Point(0, 89)
    $panel.Size = New-Object System.Drawing.Size(340, 191)
    $panel.BackColor = $colorPanelBg
    $form.Controls.Add($panel)
    
    function NewLabel([string]$text, [int]$x, [int]$y) {
        $lbl = New-Object System.Windows.Forms.Label
        $lbl.Text = $text
        $lbl.Location = New-Object System.Drawing.Point($x, $y)
        $lbl.Font = New-Object System.Drawing.Font("Segoe UI", 10)
        $lbl.AutoSize = $true
        $lbl.ForeColor = $colorText
        return $lbl
    }
    
    # =========================
    # Inputs
    # =========================
    $panel.Controls.Add((NewLabel "Select Date:" 22 12))
    
    $datePicker = New-Object System.Windows.Forms.DateTimePicker
    $datePicker.Format = 'Short'
    $datePicker.Location = New-Object System.Drawing.Point(110, 10)
    $datePicker.Width = 160
    $panel.Controls.Add($datePicker)
    
    $panel.Controls.Add((NewLabel "Select Time:" 22 46))
    
    $timePicker = New-Object System.Windows.Forms.DateTimePicker
    $timePicker.Format = 'Time'
    $timePicker.ShowUpDown = $true
    $timePicker.Width = 160
    $timePicker.Location = New-Object System.Drawing.Point(110, 44)
    $panel.Controls.Add($timePicker)
    
    # =========================
    # Mode toggle and Convert
    # =========================
    $modeButton = New-Object System.Windows.Forms.Button
    $modeButton.Size = New-Object System.Drawing.Size(160, 28)
    $modeButton.Location = New-Object System.Drawing.Point(85, 78)
    $modeButton.Font = New-Object System.Drawing.Font("Segoe UI", 9, [System.Drawing.FontStyle]::Bold)
    $panel.Controls.Add($modeButton)
    
    $convertButton = New-Object System.Windows.Forms.Button
    $convertButton.Text = "Convert"
    $convertButton.Size = New-Object System.Drawing.Size(90, 28)
    $convertButton.Location = New-Object System.Drawing.Point(122, 112)
    $convertButton.Font = New-Object System.Drawing.Font("Segoe UI", 10, [System.Drawing.FontStyle]::Bold)
    $convertButton.BackColor = $colorButton
    $convertButton.ForeColor = [System.Drawing.Color]::White
    $convertButton.FlatStyle = 'Flat'
    $panel.Controls.Add($convertButton)
    
    $outputBox = New-Object System.Windows.Forms.TextBox
    $outputBox.ReadOnly = $true
    $outputBox.Size = New-Object System.Drawing.Size(245, 20)
    $outputBox.Font = New-Object System.Drawing.Font("Consolas", 11)
    $outputBox.Location = New-Object System.Drawing.Point(47, 150)
    $panel.Controls.Add($outputBox)
    
    # =========================
    # Logic: UTC/UK toggle and conversion
    # =========================
    $script:useUtc = $true
    
    function ConvertToFileTime {
        param([datetime]$dateTime, [bool]$toUtc)
        if ($toUtc) {
            $dtUtc = [DateTime]::SpecifyKind($dateTime, [DateTimeKind]::Utc)
        } else {
            $ukTz = [System.TimeZoneInfo]::FindSystemTimeZoneById("GMT Standard Time")
            $dtUtc = [System.TimeZoneInfo]::ConvertTimeToUtc($dateTime, $ukTz)
        }
        return $dtUtc.ToFileTimeUtc()
    }
    
    $modeButton.remove_Click($null)
    
    $updateModeUi = {
        if ($script:useUtc) {
            $modeButton.Text = "Mode: UTC File Time"
            $modeButton.BackColor = $colorModeOff
            $modeButton.ForeColor = [System.Drawing.Color]::Black
        } else {
            $modeButton.Text = "Mode: UK File Time"
            $modeButton.BackColor = $colorModeOn
            $modeButton.ForeColor = [System.Drawing.Color]::Black
        }
    }
    & $updateModeUi
    
    $modeButton.Add_Click({
        $script:useUtc = -not $script:useUtc
        & $updateModeUi
    })
    
    $convertButton.Add_Click({
        $date = $datePicker.Value.Date
        $t = $timePicker.Value
        $dt = New-Object DateTime($date.Year, $date.Month, $date.Day, $t.Hour, $t.Minute, $t.Second, [DateTimeKind]::Unspecified)
        $outputBox.Text = (ConvertToFileTime -dateTime $dt -toUtc:$script:useUtc)
    })
    
    $form.ShowDialog()
    📄NativeMessaging.ps1
    Turns off Native Messaging Via Reg-key
    $path = "HKLM:\SOFTWARE\Policies\Microsoft\Edge"
    
    $name = "NativeMessagingUserLevelHosts"
    
    $current = Get-ItemProperty -Path $path -Name $name -ErrorAction SilentlyContinue
    
    if ($current.$name -eq 1) { Set-ItemProperty -Path $path -Name $name -Value 0 }
     
    📄NIC disable power-saving.ps1
    Queries then disables windows ability to manage the NIC's power-state.
    # Disable NIC power saving
    $adapters = Get-WmiObject Win32_NetworkAdapter | Where-Object { $_.PhysicalAdapter -eq $true -and $_.NetConnectionID -and $_.ConfigManagerErrorCode -eq 0 }
    foreach ($adapter in $adapters) {
        $deviceID = "{4d36e972-e325-11ce-bfc1-08002be10318}"
        $regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\$deviceID\$($adapter.DeviceID.ToString('D4'))"
        if (Test-Path $regPath) {
            Set-ItemProperty -Path $regPath -Name "PnPCapabilities" -Value 24 -Type DWord
            Write-Output "Disabled power saving on $($adapter.Name)"
        }
    }
    
    📄Add Printer.ps1
    Example of adding a printer
    Add-PrinterPort -Name "IP_192.168.1.97" -PrinterHostAddress "192.168.1.97" -PortNumber 9100
    Add-Printer -Name "Office Printer" -DriverName "Canon Office XPS Class Driver" -PortName "IP_192.168.1.97"
    
    📄Remove Printer.ps1
    Example of removing a printer
    $ip = "192.168.1.97"
    $ports = Get-PrinterPort | Where-Object { $_.PrinterHostAddress -like "*$ip*" -or $_.Name -like "*$ip*" }
    if ($ports) { $ports | Remove-PrinterPort -ErrorAction SilentlyContinue }
    
    $printers = Get-Printer | Where-Object { $_.PortName -in $ports.Name }
    if ($printers) { $printers | Remove-Printer }
    
    📄Replace Printer.ps1
    Example of replacing printer
    # OakPC01 Printer Replacement Script for Intune
    $PrinterName = 'OAKPrint01'
    $PrinterIP = '10.100.3.251'
    $PortName = "IP_$PrinterIP"
    $NewDriverName = 'Canon Generic Plus PCL6'
    $INFPaths = @('.\driver1.inf', '.\driver2.inf', '.\driver3.inf')
    
    # Restart Spooler
    Restart-Service -Name Spooler -Force -ErrorAction SilentlyContinue
    
    #Remove if exists
    $ExistingPrinter = Get-Printer -Name $PrinterName -ErrorAction SilentlyContinue
    if ($ExistingPrinter) {
        Remove-Printer -Name $PrinterName -ErrorAction Stop
        Write-Output "Removed existing $PrinterName"
    }
    
    # Remove port if exists
    $ExistingPort = Get-PrinterPort -Name $PortName -ErrorAction SilentlyContinue
    if ($ExistingPort) {
        Remove-PrinterPort -Name $PortName -ErrorAction Stop
        Write-Output "Removed existing port $PortName"
    }
    
    # Install new drivers silently
    foreach ($INF in $INFPaths) {
        if (Test-Path $INF) {
            $result = & pnputil.exe /add-driver $INF /install /quiet 2>&1
            if ($LASTEXITCODE -eq 0) {
                Write-Output "Installed driver from $INF"
            } else {
                Write-Error "Failed to install $INF : $result"
                exit 1
            }
        } else {
            Write-Error "INF not found: $INF"
            exit 1
        }
    }
    
    # Create port
    Add-PrinterPort -Name $PortName -PrinterHostAddress $PrinterIP -PortNumber 9100 
    Write-Output "Created port $PortName"
    
    # Add printer with new driver
    Add-Printer -Name $PrinterName -DriverName $NewDriverName -PortName $PortName
    Write-Output "Added $PrinterName with $NewDriverName"
    
    # Restart Spooler
    Restart-Service -Name Spooler -Force
    Write-Output "Script completed successfully"
    exit 0
    
    📄Windows hosts file.ps1
    Adds a local record to the host file (writes over existing)
    $hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
    $ip = "127.0.0.1"  # Change this
    $hostName = "example.com"  # Change this
    $entry = "$ip $hostName"
    
    if (Test-Path $hostsPath) {
        $content = Get-Content $hostsPath | Where-Object { $_ -notmatch '^#' -and $_ -match "\s+$hostName\$" }
        if (-not $content) {
            Add-Content -Path $hostsPath -Value $entry -Encoding UTF8
            Write-Output "Added $entry to hosts file."
        } else {
            Write-Output "Entry for $hostName already exists."
        }
    } else {
        Write-Error "Hosts file not found."
    }
    
    📄File Path Too Long.ps1
    Looks for files over a file path length in a location
    param(
        [switch]$s
    )
    
    # Define the base directory to search in
    $baseDir = "C:\Documents"  # Change this path as needed
    
    # Define the maximum path length
    $maxLength = 400
    
    # Define the log file path
    $logFile = "C:\temp\long_paths_log.txt"
    
    # Ensure the log directory exists
    if (-not (Test-Path "C:\temp")) {
        New-Item -ItemType Directory -Path "C:\temp"
    }
    
    # Start the transcript for logging
    Start-Transcript -Path $logFile
    
    # Start the process of finding long paths
    Write-Host "Searching for files with paths longer than $maxLength characters in $baseDir..."
    
    # Get all files recursively in the base directory
    try {
        $longFiles = Get-ChildItem -Path $baseDir -Recurse -File -ErrorAction SilentlyContinue | Where-Object { $_.FullName.Length -gt $maxLength }
    } catch {
        Write-Host "An error occurred while accessing the directory: $_"
    }
    
    # Check if there are any long paths
    if ($longFiles.Count -gt 0) {
        Write-Host "Files found with paths longer than $maxLength characters. Listing them below:"
        $longFiles | ForEach-Object { Write-Host $_.FullName }
    } else {
        Write-Host "No files found with paths exceeding $maxLength characters."
    }
    
    # Handle the -s switch if provided
    if ($s) {
        Write-Host "Switch -s detected. Running additional logic..."
        # Add your custom logic for the -s switch here
    }
    
    # End the output redirection
    Stop-Transcript
    
    Write-Host "Log has been saved to $logFile"
    
    📄Remove App By Name.ps1
    Removes a app by name, can be used following a query of the installed apps if needed.
    $app = Get-WmiObject -Class Win32_Product | Where-Object {
    $_.Name -match "APP NAME"
    }
    $app.Uninstall()

    📘 PowerShell Knowledge Base | Last Updated: March 2026

    ⚠️ Made By Tyler Jemson with help from: Stolen Code!