Skip to content

Instantly share code, notes, and snippets.

View nanoDBA's full-sized avatar

nanoDBA nanoDBA

View GitHub Profile
@nanoDBA
nanoDBA / Download_and_install_latest_SSMS_release.ps1
Created November 18, 2021 18:39
Download and install latest SSMS release
<# download and install latest SSMS release #>
$SSMS_filename = "$env:USERPROFILE\downloads\SSMS-Setup-ENU-" + ([string](Get-Date -format "yyyy-MM-dd")) + ".exe"
Start-BitsTransfer -Source 'https://aka.ms/ssmsfullsetup' -Destination $SSMS_filename
& $SSMS_filename /install /passive
<# Thanks to @sqltoolsguy and his team for creating the aka.ms links!
https://twitter.com/sqltoolsguy/status/1011754064516804608 #>
@nanoDBA
nanoDBA / How to use TSS Tools with Microsoft Support.ps1
Last active February 23, 2026 23:49
How to use TSS Tools with Microsoft Support
<#
How to use TSS Tools with Microsoft Support
https://gist.github.com/nanoDBA/ac409275a6ef406f9134856f1245f72f
Modern approach using TSS.ps1 -SDP (replaces the old Get-psSDP.ps1 standalone method).
Also covers SQL LogScout — now Microsoft CSS's preferred tool for SQL-specific diagnostics.
Source: https://aka.ms/TssTools
SQL LogScout: https://github.com/microsoft/SQL_LogScout
#>
@nanoDBA
nanoDBA / Danger-Reboot.ps1
Created November 20, 2021 10:49
Reboot Script Work in Progress
<# DANGER REBOOTING! #>
$msg = "Due to installs/updates of SQL Prompt, this computer must be restarted. You have 15 minutes to save your work"
$delay = 900 # seconds
shutdown /r /f /d P:4:1 /t`$($delay) /c "$msg" 2>$null
if ($LastExitCode -ne 0) {
Write-Host "Cannot reboot $PC ($LastExitCode)" -ForegroundColor black -BackgroundColor red
}
else {
#LogWrite "$env:username,$PC,Reboot Sent,$datetime" #fix this...
@nanoDBA
nanoDBA / Disable and Uninstall Windows Defender.ps1
Created November 20, 2021 11:05
Disable and Uninstall Windows Defender - Requires Reboot
if (! ( (Get-WindowsFeature -Name Windows-Defender-Features).Installed)) {
Write-Output "Windows Defender is not installed" | Out-String | Write-Host -ForegroundColor Yellow
}
if ( (Get-WindowsFeature -Name Windows-Defender-Features).Installed) {
#Disable Windows Defender http://www.thomasmaurer.ch/2016/07/how-to-disable-and-configure-windows-defender-on-windows-server-2016-using-powershell/
Set-MpPreference -DisableRealtimeMonitoring $true
# uninstall Windows Defender https://technet.microsoft.com/en-us/windows-server-docs/security/windows-defender/windows-defender-overview-windows-server
Get-WindowsFeature -Name Windows-Defender-Features
Uninstall-WindowsFeature -Name Windows-Defender-Features -Confirm:$false
Get-WindowsFeature -Name Windows-Defender-Features
@nanoDBA
nanoDBA / Download_and_install_Solarwinds_SentryOne_Plan_Explorer.ps1
Created November 20, 2021 14:02
Download and install Solarwinds SentryOne Plan Explorer
<# download and install Solarwinds SentryOne Plan Explorer #>
$filenamePlanExplorerInstall = "$env:USERPROFILE\downloads\" + ([string](Get-Date -format "yyyy-MM-dd")) + "_SolarWinds-PlanExplorer.exe"
Start-BitsTransfer -Source 'https://downloads.solarwinds.com/solarwinds/Release/FreeTool/SolarWinds-PlanExplorer.exe' -Destination $filenamePlanExplorerInstall
& $filenamePlanExplorerInstall /install /passive /norestart
@nanoDBA
nanoDBA / PlaySoundIfOnline.ps1
Created December 15, 2021 16:40
If you want to check a port on a remote computer every few seconds until it comes back online this will work. A sound will play in a loop on a windows box once the machine comes back online as well. CTRL-C to stop it.
$computerName = "some.computer.name"
$portNumber = 3389
while ((Test-NetConnection -ComputerName $computerName -Port $portNumber).TcpTestSucceeded -EQ $false){
Write-Host "Checking TCP port $portNumber on $computerName..."
Start-Sleep -Seconds 5
Get-Date -Format "yyyy-MM-ddTHH:mm:ss (K)"
if ((Test-NetConnection -ComputerName $computerName -Port $portNumber).TcpTestSucceeded -EQ $true){
Write-Host -ForegroundColor Magenta "Yay!! TCP port $portNumber on $computerName is back online!"
while($true){(New-Object System.Media.SoundPlayer $((Get-ChildItem -Path "$env:windir\Media\tada.wav").FullName)).Play(); Start-Sleep -Seconds 2}
@nanoDBA
nanoDBA / Test-DiskSpd.ps1
Last active June 28, 2025 19:59
Download / Extract and Run DiskSpd - Automated EC2 volume and DiskSpd benchmarking for Windows
# ------------------------------------------------------------------------------
# File: Test-DiskSpd.ps1
# Description: 🚀 Automated EC2 volume and DiskSpd benchmarking for Windows
# Purpose: Retrieves detailed EC2 volume info and runs robust DiskSpd I/O
# benchmarks on specified drives. Handles AWS, local, and hybrid
# scenarios with safety checks, resumable downloads, and cleanup.
# Built for DBAs and sysadmins who want to know their storage is
# actually as fast as the cloud bill says! 😎
# Created: 2025-06-26
# Modified: 2025-06-26
@nanoDBA
nanoDBA / Get-WinUpdate.ps1
Last active August 30, 2025 15:42
Exclude SQL Server From Windows Updates
<# https://4sysops.com/archives/use-powershell-to-test-if-a-windows-server-is-pending-a-reboot/ #> $pendingRebootTests=@(@{Name='RebootPending';Test={Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing' -Name 'RebootPending' -ErrorAction Ignore};TestType='ValueExists'},@{Name='RebootRequired';Test={Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update' -Name 'RebootRequired' -ErrorAction Ignore};TestType='ValueExists'},@{Name='PendingFileRenameOperations';Test={Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Name 'PendingFileRenameOperations' -ErrorAction Ignore};TestType='NonNullValue'}); $results=@();foreach($item in $pendingRebootTests){$result=Invoke-Command -ScriptBlock $item.Test;if($result){$results+=New-Object PSObject -Property @{Name=$item.Name;Status='Pending'}}};if($results){$results|Format-Table}else{Write-Output 'No Pending Reboot'}
<# DANGER - ***forced reboot(s) may occur
@nanoDBA
nanoDBA / Invoke-Robocopy.ps1
Created September 28, 2022 13:57
robocopy root of a volume unbuffered and multithreaded with 128 threads
#robocopy root of a volume multithreaded unbuffered
$description = 'SRV_Migration'
$source = '\\10.0.0.0\P$'
$target = 'P:'
$robocopyLogFilename = "$($target)\" + ( [string](Get-Date -format "yyyy-MM-dd_HH-mm-ss") ) + "_" + $($description) + "_(" + ($target).Substring(0,1) + ")_robocopy.log"
# exclude the Recycle Bin and sysvol folders, and exclude pagefile
robocopy $source $target * /E /W:10 /XD "System Volume Information" "`$RECYCLE.BIN" /LOG+:$robocopyLogFilename /NP /TEE /SEC /MT:128 /XF pagefile.sys /J
<#
--AG-Resume.sql for SQL Agent job
--Check Sync State and Execute Resume
DROP TABLE IF EXISTS #agAynamicSqlResume
DECLARE @sqlCommand NVARCHAR(max)
SELECT ';ALTER DATABASE [' + Db_name(DRS.database_id) + '] SET HADR RESUME' AS [resume_sql],
AGS.name AS AGGroupName,
AGL.dns_name AS Listener_dns_name,