====== Powershell misc ======
===== Powershell man page =====
List all commands, you can add as parameter **-examples** **-full** **-detailed**
PS /home/manu> get-command *
...
PS /home/manu> get-command *service*
List Get-Command cmdlet with an alias
PS> Get-Command -Name dir
CommandType Name ModuleName
----------- ---- ----------
Alias dir -> Get-ChildItem
List all commands from a specific module
PS /home/manu> get-command -module activedirectory
This command gets all of the cmdlets, sorts them alphabetically by the noun in the cmdlet name, and then displays them in noun-based groups:
PS > Get-Command -Type Cmdlet | Sort-Object -Property Noun | Format-Table -GroupBy Noun
uses the All parameter of the Get-Command cmdlet to show all instances of the Notepad command on the local computer.
PS> Get-Command Notepad -All | Format-Table CommandType, Name, Definition
CommandType Name Definition
----------- ---- ----------
Application notepad.exe C:\WINDOWS\system32\notepad.exe
Application NOTEPAD.EXE C:\WINDOWS\NOTEPAD.EXE
Man page
PS /home/manu> get-help Write-Progress
NAME
Write-Progress
SYNTAX
Write-Progress [-Activity] [[-Status] ] [[-Id] ] [-PercentComplete ] [-SecondsRemaining ] [-CurrentOperation ] [-ParentId ] [-Completed] [-SourceId ]
[]
Commands alias
PS /home/manu> get-alias
===== Remove header/descriptor =====
PS /root> Get-VM lnx01a | ForEach-Object {$_.Name}
lnx01a
===== Upper / Lower =====
PS /root> $text1 = "Hello".ToUpper()
PS /root> Write-Host $text1
HELLO
PS /root> $text1 = "Hello".ToLower()
PS /root> Write-Host $text1
hello
**ATTENTION:** Powershell is not case sensitive
PS /root> $text1 = "Hello"
PS /root> $text2 = "HELLO"
PS /root> $text1 –eq $text2
True
===== List full parameters =====
Get full parameters **format-list** or **fl**
PS /root> Get-Process | format-list
Id : 1627
Handles : 7
CPU : 0
SI : 1627
Name : xrdp-sesman
...
Get selected parameters
PS /root> Get-Process | format-list -Property Id,CPU
Id : 1627
CPU : 0
...
Powershell **tail**, **sort**
PS /root> Get-Process | Sort-Object -Property CPU | Select-Object -Last 5
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 1695.88 3461.67 2118 118 X
0 0.00 83.30 3837.19 5662 328 chrome
0 0.00 562.67 4124.23 3965 283 firefox
0 0.00 20.55 5235.46 2373 370 pulseaudio
0 0.00 6483.15 79748.30 31295 264 VirtualBoxVM
===== log your script =====
$Logfile = $MyInvocation.MyCommand.Path -replace '\.ps1$', '.log'
Start-Transcript -Path $Logfile
#Doing some stuff with the Verbose parameter
Get-ChildItem -Verbose
Get-Service -Verbose
Get-Process -Verbose
Write-Output 'Writing some text to the log file'
Stop-Transcript
===== Suppress multiple pattern in list =====
PS /usr/fcm> $Eliminate = @("vml","vm2","vm3")
PS /usr/fcm> Get-VM | Select-String -pattern $Eliminate -notMatch
vm4
vm5
===== grep in Powershell =====
PS /usr/bin/fcm/tmp> Get-Content -Path vminfo.txt | Where-Object { $_ -Match "^VM_Datastore:"}
===== sed in Powershell =====
# cat input.txt | sed 's/old/new/' > output.txt
cat: in Powershell : Get-Content
$_ : pipe
{ } : command delimiter
% : iteration
PS> Get-Content input.txt | %{$_ -replace "old", "new"} | Set-Content output.txt
===== sort in Powershell =====
PS> Get-ChildItem -Path C:\Test | Sort-Object
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/13/2019 08:55 26 anotherfile.txt
-a---- 2/13/2019 13:26 20 Bfile.txt
-a---- 2/12/2019 15:40 118014 Command.txt
-a---- 2/1/2019 08:43 183 CreateTestFile.ps1
d----- 2/25/2019 18:25 Files
PS> Get-ChildItem -Path C:\Test -File | Sort-Object -Property Length
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/13/2019 13:26 20 Bfile.txt
-a---- 2/12/2019 16:24 23 Zsystemlog.log
-a---- 2/13/2019 08:55 26 anotherfile.txt
-ar--- 2/12/2019 14:31 27 ReadOnlyFile.txt
-a---- 2/1/2019 08:43 183 CreateTestFile.ps1
-a---- 2/12/2019 15:40 118014 Command.txt
PS> Get-Process | Sort-Object -Property WS | Select-Object -Last 5
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 530.43 369.05 24977 283 firefox
0 0.00 547.91 1360.88 4559 237 evolution
0 0.00 1418.94 44.16 14488 237 okular
0 0.00 2072.61 3317.51 2071 071 X
0 0.00 6548.90 33021.09 6754 063 VirtualBoxVM
PS> Get-Process | ft name,starttime
xdg-document-po 25/12/21 07:49:32
xdg-permission- 25/12/21 07:49:32
xembedsniproxy 25/12/21 07:49:30
xfs_mru_cache 25/12/21 07:45:06
xfs-buf/sda4 25/12/21 07:45:06
PS> Get-Service |Sort-Object -Property @{Expression = "Status"; Descending = $true},@{Expression = "DisplayName";Descending = $false}
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running BthAvctpSvc AVCTP service
Running BrokerInfrastru... Background Tasks Infrastructure Ser...
Running BDESVC BitLocker Drive Encryption Service
Running CoreMessagingRe... CoreMessaging
Running VaultSvc Credential Manager
Running DsSvc Data Sharing Service
Running Dhcp DHCP Client
| Sort-Object -Unique : only one occurrence of each word
| Sort-Object : string sort
| Sort-Object {[int]$_} : integer sort
-CaseSensitive ...
-Descending
===== Misc commands =====
==== tail ====
get last 5 lines from file
PS> Get-Content -path /root/toto.py -tail 5
PS> get-content |select -last 5
PS> get-content |select -last 5 | Write-Output
==== head ====
get first 5 lines from file
PS> Get-Content -path /root/toto.py -totalcount 5