My PowerShell Notes
- Last updated: Dec 9, 2020
Here lies my PowerShell notes.
- A function to send emails :
Function Mail
{
param ([string]$sujet)
$encoding = [System.Text.Encoding]::UTF8
Send-MailMessage -To destination@shebangthedolphins.net -Subject $sujet -From source@shebangthedolphins.net -smtpserver smtp.shebangthedolphins.net -Body $sujet -Encoding $encoding
}
Mail "Subject"
Files
- Redirect output to file :
Get-WmiObject -Class Win32_service | Select-Object Name,DisplayName,startmode | Out-File -FilePath C:\services.txt
- Remove a character from files name, example here where we remove o character for all mp4 files :
Get-ChildItem -filter *mp4 | Rename-Item -NewName {$_.Name -replace "o"}
- Compare content of two csv files :
Compare-Object (Get-Content .\kb01.csv | Sort-Object | Sort-Object -unique) (Get-Content .\kb02.csv | Sort-Object | Sort-Object -unique)
- Compare two files with hash :
$(Get-FileHash C:\01.zip | Select-Object -Property Hash).Hash -eq $(Get-FileHash C:\02.zip | Select-Object -Property Hash).Hash
Miscellaneous
- Run unsigned script :
PowerShell.exe -ExecutionPolicy Bypass -File Script.ps1
- Set time :
Set-Date -date "12/7/2017 4:00 PM"
- Show date with prepredefined format :
Get-Date -Format "dd/MM/yyyy"
- Export KB list to csv :
Get-HotFix | Select-Object hotfixid | Sort-Object hotfixid | Export-Csv -path c:\$(get-date -Format "yyyy.MM.dd")_kb.csv -NoTypeInformation
- Know if a KB is installed :
Get-HotFix | Select-Object hotfixid | Sort-Object hotfixid | Where-Object { $_ -match ".*KB156.*" }
- Modify Last Write Time :
$a = Get-Item '.\Download\myfile.txt'
$a.LastWriteTime = "10/03/2016 8:00 AM"
- Extract multiple Dell drivers exe :
foreach ($app in $(Get-ChildItem | ? { $_.Name -match "exe" })) { Start-Process -FilePath ".\$($app.Name)" -ArgumentList "/s /e=.\_$($app.Name)" -Wait }
Arrays
- Declare an array :
$myUsers = @("Stan Marsh","Kyle Broflovski","Eric Cartman","Kenny McCormick")
- Or :
$myUsers = New-Object System.Collections.ArrayList
[void]$myUsers.AddRange( ("Stan Marsh","Kyle Broflovski","Eric Cartman","Kenny McCormick") )
Network
- Get ip address for all Interfaces :
Get-NetIPAddress
- Set ip address to Ethernet Interface :
New-NetIPAddress -InterfaceAlias "Ethernet" -ipaddress "192.168.1.111" -PrefixLength 24 -DefaultGateway "192.168.1.254"
- Remove ip address to Ethernet Interface :
Remove-NetIPAddress -IPAddress 192.168.1.111 -Confirm:$false
- Change MAC address of connected network devices :
Get-NetAdapter | Where-Object { $_.status -eq 'up' } | set-netadapter -MacAddress '001122334455' -Confirm:$flase
- Modify network connection profile :
Get-NetConnectionProfile
Set-NetConnectionProfile -InterfaceIndex 10 -NetworkCategory Private
Programs
- Get programs list :
Get-WmiObject Win32_product | Select-Object -Property Name,Vendor,Version | Sort-Object -Property name
- Export programs list to csv file :
Get-WmiObject Win32_product | Select-Object -Property Name,Vendor,Version | Sort-Object -Property name | Export-Csv -Path C:\prog_list.csv
Services and Process
Services
- List Services :
Get-WmiObject -Class Win32_Service | Select-Object Name,DisplayName,StartMode
- List Services
Get-Service | Select-Object Name,DisplayName,StartType
Process
- Get process with users names :
Get-Process -IncludeUserName | Select-Object UserName,SessionId
- List logged on users :
Get-Process -IncludeUserName | Select-Object Username,processname | Where-Object { $_.ProcessName -eq "explorer" } | ForEach-Object {"{1}" -f $_.UserName.ToString().Split('\') }
Get-Process -IncludeUserName | Select-Object Username,processname | Where-Object { $_.ProcessName -eq "explorer" } | %{"{0}\{1}" -f $_.UserName.ToString().Split('\')[0],$_.UserName.ToString().Split('\')[1]}