====== 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