User Tools

Site Tools


powershell_cheat_sheet

This is an old revision of the document!


Powershell Cheat Sheet

File exists check

if (Test-Path $path) {
    Write-Host "File exists."
}
if (!(Test-Path $path)) {
    Write-Host "File does not exist."
}

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

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

Search installed certs for 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

Get Install-Module working behind a webproxy

  1. Run notepad $PROFILE.
  2. 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
  3. Uncomment, fill out the details, and save.
  4. Start a new Powershell session.
  5. Run Register-PSRepository -Default
  6. Run Get-PSRepository again to verify.
  7. Once installation is complete, comment out commands and change password.

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

function Replace-String {
    [cmdletbinding()]
    Param (
        [parameter(ValueFromPipeline)]
        [string]$Input,
        [string]$OldValue,
        [string]$NewValue
    )
 
    Process {
        $Input -replace $OldValue, $NewValue
    }
}
 
'djkslajklfdsjkl' | Replace-String -OldValue 'd' -NewValue 'x'
powershell_cheat_sheet.1602879221.txt.gz · Last modified: 2020/10/17 21:13 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki