powershell_cheat_sheet
Table of Contents
Powershell Cheat Sheet
File exists check
if (Test-Path $path) { Write-Host "File exists." } if (!(Test-Path $path)) { Write-Host "File does not exist." }
Check previous command was successful
if ($?) { Write-Host 'Success' -ForegroundColor Green } else { Write-Host 'FAILED' -ForegroundColor Red throw 'Failed.' }
Searching in files
Get-ChildItem -Recurse -Path C:\Temp -Include *.txt | Select-String 'This', 'OR that' | Select-String 'AND this' | Format-Table -property path, line -autosize | Out-String -Width 4096
Search and replace in a file
(Get-Content $filename) -replace 'heise', 'Heise' | Set-Content $filename
Create a timestamp
$timestamp = (Get-Date).ToString("yyyyMMdd HHmmssff")
Parameters
param ( [parameter(Mandatory=$true,HelpMessage='The target server')] [string]$targetServer, [parameter(Mandatory=$true)] [string]$targetWebConfig, [parameter(Mandatory=$false)] [string]$build = 'debug' )
Set current directory to script location
Push-Location "$($MyInvocation.MyCommand.Path)\..\" #... Pop-Location
Certificates
Search by thumbprint:
Get-ChildItem -Path Cert: -Recurse | Where-Object { $_.Thumbprint -and $_.Thumbprint.ToLower().StartsWith('c4') }
To check if the cert is valid, pipe it the Test-Certificate
command:
Get-ChildItem -Path Cert: -Recurse | Where-Object { $_.Thumbprint -and $_.Thumbprint.ToLower().StartsWith('c4') } | Test-Certificate
To check for expired / revoked certs:
$certs = Get-ChildItem -Path Cert:\LocalMachine\My -Recurse foreach ($cert in $certs) { Write-Host "$($cert.Thumbprint) $($cert.Subject)" if ($certs.NotAfter -lt (Get-Date)) { Write-Host " Expired on $($certs.NotAfter)" -ForegroundColor Red } elseif ($cert | Test-Certificate) { Write-Host " Tested ok." -ForegroundColor Green } }
Get Install-Module working behind a webproxy
- Run
notepad $PROFILE
. - Add this to the top:
# Uncomment this to use PowerShellGet #$Username="global\heises" #$Password="password" #[system.net.webrequest]::defaultwebproxy = new-object system.net.webproxy('http://10.104.66.70:80') #[system.net.webrequest]::defaultwebproxy.credentials = New-Object System.Net.NetworkCredential($Username, $Password) #[system.net.webrequest]::defaultwebproxy.BypassProxyOnLocal = $true
- Uncomment, fill out the details, and save.
- Start a new Powershell session.
- Run
Register-PSRepository -Default
- Run
Get-PSRepository
again to verify. - Once installation is complete, comment out commands and change password.
If this doesn't work, and it won't for an ANZ Dev VM, try the PowerShell Manual Module Installation.
No Sleep
May only work inside Windows Powershell ISE.
$intervalSeconds = 60 $mouseDistance = 1 $myshell = New-Object -com "Wscript.Shell" while ($true) { Start-Sleep -Seconds $intervalSeconds $Pos = [System.Windows.Forms.Cursor]::Position [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + $mouseDistance) , $Pos.Y) [System.Windows.Forms.SendKeys]::SendWait("{f15}") Write-Host 'A shuffle to the right.' Start-Sleep -Seconds $intervalSeconds $Pos = [System.Windows.Forms.Cursor]::Position [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) - $mouseDistance) , $Pos.Y) [System.Windows.Forms.SendKeys]::SendWait("{f15}") Write-Host 'A shuffle to the left.' }
Text Processing
Simple replace (supports regexs)
'1234abcd' -replace '\d', '*' # ****abcd
Simple match (supports regexs)
'123.456.789.123' -match '\d+(?:\.\d+){2}' # returns true if there is a match. $Matches.Values # = '123.456.789'
Filter lines by regex
$inputText = '!! Match me Not me !! Match me too Not me tho' $regex=[regex] '(?m)^!!.+?$' $regex.matches($inputText) | Foreach-Object { $_.Value } # Returns a string, one match per line.
Reformatting by using regex groups
# Filter lines by regex. $inputText = ' .. . . left:10 . .. right:10 ... .. . . left:20 . .. right:20 ... .. . left:30 . . ... .. right:30 ... left:40right:40' -replace "`r`n", "`n" $regex=[regex] '(?m)^[ \.]*(?<left>left:\d+)[ \.]*(?<right>right:\d+)[ \.]*$' $regex.matches($inputText) | Foreach-Object { $_.Groups["left"].value + ' - ' + $_.Groups["right"].value} # Returns a string: #left:10 - right:10 #left:20 - right:20 #left:30 - right:30 #left:40 - right:40
Regex groups
$regex=[regex] ('-rw-rw---- 1 root sdcard_rw (?<length>\d+) (?<date>\d\d\d\d-\d\d-\d\d \d\d:\d\d) (?<filename>.*)$') $input='-rw-rw---- 1 root sdcard_rw 358 2019-09-01 19:50 /storage/emulated/0/Podcasts/Sync Test/New folder/rua.txt' $matches = $regex.matches($input) if (!($matches.Success)) { Write-Host "Regex failed to match: $input" -ForegroundColor Red Exit(-1) } Write-Host "length = $($matches.Captures.Groups["length"].value)" Write-Host "date = $($matches.Captures.Groups["date"].value)" Write-Host "filename = $($matches.Captures.Groups["filename"].value)"
Regex replace with groups
# $1 = group 1, $2 = group 2, etc. '123 456 789' -replace '(\d+ )(\d+)( \d+)', '$1!$2!$3' # = '123 !456! 789'
Pipeline function
powershell_cheat_sheet.txt · Last modified: 2021/04/13 21:53 by 127.0.0.1