Collection of useful DBA and system monitoring commands for PowerShell. Use as reference — copy/paste commands as needed.
Shows system paths, user info, temp directories, etc.
Get-ChildItem env:$env:COMPUTERNAME$PSVersionTable.PSVersion[System.Net.Dns]::GetHostEntry('10.10.10.1')Invoke-Command -ComputerName TST01 -ScriptBlock {
$env:COMPUTERNAME + ' - Port 139 : ' +
(New-Object System.Net.Sockets.TcpClient).ConnectAsync('destination', 139).Wait(1000)
}EventID 1074 = System shutdown initiated by user/process.
Get-EventLog -LogName System -Newest 10000 |
Where-Object { $_.eventid -eq '1074' } |
Select-Object MachineName, UserName, TimeGenerated |
Sort-Object TimeGenerated -DescendingGet-EventLog -LogName "System" -Source "Service Control Manager" `
-EntryType "Information" `
-Message "*Computer Browser service*running*" `
-Newest 1$Begin = Get-Date -Date '12/10/2020 04:30:00'
$End = Get-Date -Date '12/10/2020 05:30:00'
Get-EventLog -LogName System -After $Begin -Before $End
Get-EventLog -LogName Application -After $Begin -Before $End
Get-EventLog -LogName Setup -After $Begin -Before $End
# Security log failures only (show in GridView)
Get-EventLog -LogName Security -After $Begin -Before $End |
Where-Object { $_.EntryType -eq 'FailureAudit' } |
Out-GridView$server = @('s1', 's2')
while ($true) {
$server | ForEach-Object {
if (-not (Test-Connection $PSItem -Count 1 -Quiet)) {
Write-Output "$($PSItem) : $(Get-Date) - Request Timed Out" |
Out-File C:\_tools\S_log.txt -Append
}
}
}.\psping.exe -t SQL01:1433 | ForEach-Object {
"{0} - {1}" -f (Get-Date), $_
} | Tee-Object -FilePath "C:\Log\SQL01_log.txt"Get-ChildItem "C:\Program Files\Microsoft SQL Server" -Filter *.exe -Recurse |
ForEach-Object { $_.FullName }Get-ChildItem "K:\" -Filter "*.*" -Recurse -File |
Where-Object CreationTime -LT (Get-Date).AddDays(-180) |
Select-Object fullname, creationtime |
Out-GridViewGet-ChildItem "J:\" -Filter "*.bak" -Recurse -File |
Where-Object CreationTime -LT (Get-Date).AddDays(-20) |
Select-Object fullname, creationtime,
@{ N = 'SizeIngb'; E = { [double]('{0:N2}' -f ($_.Length / 1gb)) } } |
Out-GridViewAlways run with
-WhatIffirst to preview before deleting.
Get-ChildItem -Recurse -Directory |
Where-Object { -not ($_.EnumerateFiles('*', 1) | Select-Object -First 1) } |
Remove-Item -Recurse -WhatIfSearch for text pattern in all files under a directory. Exports results to CSV.
Get-ChildItem -Path "C:\Program Files\Microsoft SQL Server\" -Filter "*.*" -Recurse |
Select-String -Pattern "Exception" |
Select-Object -Property Path, LineNumber, Line |
Export-Csv "C:\temp\Result.csv"Find files larger than specified size, older than X days.
$path = "\\servername\d$"
$size = 1MB
$limit = 500
$Extension = "*.bak"
$largeSizefiles = Get-ChildItem -Path $path -Recurse -ErrorAction "SilentlyContinue" -Include $Extension |
Where-Object { $_.GetType().Name -eq "FileInfo" } |
Where-Object { $_.Length -gt $size } |
Where-Object CreationTime -LT (Get-Date).AddDays(-7) |
Sort-Object -Property length -Descending |
Select-Object fullname, creationtime,
@{ Name = "SizeInGB"; Expression = { $_.Length / 1GB } },
@{ Name = "Path"; Expression = { $_.Directory } } -First $limit
$largeSizefiles | Out-GridViewGet-Cluster | Format-List *subnet*(Get-Cluster).SameSubnetDelay = 2000 # milliseconds (heartbeat interval)
(Get-Cluster).SameSubnetThreshold = 10 # number of missed heartbeats before failoverGet-ClusterResource "SQL Network Name (XXXXXXXXX)" | ForEach-Object {
$_.Name = "YYYYYYYYYYY"
}Get-ClusterResource ag01 | Set-ClusterParameter RegisterAllProvidersIP 0 # register only active IP
Get-ClusterResource ag01 | Set-ClusterParameter HostRecordTTL 30 # DNS TTL in seconds$cn = Get-ClusterResource | Select-Object Name
$cn | ForEach-Object {
Get-ClusterResource $cn.Name | Get-ClusterParameter
}Download and save PowerShell module locally for offline use.
$wc = New-Object System.Net.WebClient
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
Find-Module -Name "azurerm.storage" -Repository "PSGallery" |
Save-Module -Path "C:\temp\PSModules\" -VerboseRun script/command as Administrator.
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process -Verb runAs -ArgumentList $arguments -FilePath "C:\test.exe"Reset AD user password.
$user = 'username'
$newPass = 'NewPassword123!'
Set-ADAccountPassword -Identity $user -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newPass" -Force)Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object LastBootUpTime(Get-Date) - (Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTimeGet-Service | Where-Object { $_.Status -eq 'Running' } | Select-Object Name, DisplayNameGet-Volume | Where-Object { $_.DriveLetter } |
Select-Object DriveLetter,
@{N='SizeGB';E={[math]::Round($_.Size/1GB,2)}},
@{N='FreeGB';E={[math]::Round($_.SizeRemaining/1GB,2)}}Get-NetIPConfiguration | Select-Object InterfaceAlias, IPv4Address, IPv4DefaultGatewayTest-NetConnection -ComputerName "server1", "server2" -Port 1433 |
Select-Object ComputerName, RemotePort, TcpTestSucceeded- Use
Out-GridViewfor interactive data review - Use
Export-Csvto save results for documentation - Use
-WhatIfwithRemove-Itemto preview before deleting - Use
-ErrorAction "SilentlyContinue"to suppress errors on inaccessible paths - Use
Tee-Objectto display and log simultaneously