PowerShell

From Torben's Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

run

single command

powershell -c "$lastmonth = (Get-Date).addMonths(-3); $lastmonth.tostring(\"yyyy-MM\")"

script file

powershell -executionpolicy bypass -File ./del-old-dirs.ps1

echo/print

Write-Host "Hello World"
pause

date

get current date e.g. YYYY-MM

powershell -c "$lastmonth = (Get-Date).addMonths(-3); $lastmonth.tostring(\"yyyy-MM\")"

strings

get substring of string

$var = 'Hello World'
$result = $var.substring(0, 5)
$result-> Hello

merge stings

$dest = $rootPath + "\" +$subFolder

filesystem access

check a dir exists

if (Test-Path $dest) { ... }

del / delete file

Remove-Item -Path "C:\dir\file.txt" 

mkdir / create dirctory

New-Item -ItemType directory -Path C:\newDir

select old files from directory

$limit = (Get-Date).AddDays(-90)
$scope = Get-ChildItem -Path $dir -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit }
#
# Filters:
# -Filter "*.dfq"
# Where
# $_.PSIsContainer  => dirs
# !$_.PSIsContainer => files
# 
# write scope to CSV file
$scope | Select-Object FullName, CreationTime | Export-Csv -Path .\$logfile -NoTypeInformation 
# -Append 
# delete files in scope
$scope | Remove-Item -Force

delete old files

delete old files (from [1])

$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force 
# delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

if / else

if folder exists

if (Test-Path $dirDone) { ... }

exit with error code

exit (1)

loops

$dirs = Get-ChildItem -Path .\ -Directory
foreach ($d in $dirs) { ... }

mount network share

net use q: \\server\dir1\dir2
net use q: /delete