# Powershell ## Data storing ### Variable ```ps $x="Text" ``` #### Invoking / Data types ##### String ```ps [string]$x="Text" ``` ##### Int ```ps PS C:\Windows\system32> [int]$x=1 PS C:\Windows\system32> [int]$x="1" PS C:\Windows\system32> [int]$x="1a" Cannot convert value "1a" to type "System.Int32". Error: "Input string was not in a correct format." At line:1 char:1 + [int]$x="1a" + ~~~~~~~~~~~~ + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException ``` ##### Bool (MS Documentation)[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_booleans?view=powershell-7.2] ### Array ```ps $arry = @("a", "b", "c") ``` ### Hash Table / Dictionary [MS documentation](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-7.2) ```ps [ordered]@{ = ; [ = ] ...} ``` (By default sorts by values, I believe ordered means the array trust you as the elements are ordered.) ```ps $X = [ordered]@{A=1;C=2;B=3} ``` ### Call a single elemnt from the array #### *Normal* Array ```ps @("a", "b", "c")[0] >> a ``` ```ps @("a", "b", "c")[-1 ] >> c ``` #### Hash array ```ps @{A=1;C=3;B=2}["A"] >> 1 ``` ## User Interaction ### Output #### Write-Host Also accepts from redirection ``` Write-Host [[-Object] ] [-NoNewline] [-Separator ] [-ForegroundColor ] [-BackgroundColor ] [] ``` ```ps Write-Host "text" ``` #### Write-Output ```ps Write-Output "text" ``` ## Filtering ```ps Write-Output "text" | Select-String -pattern $filters -notMatch ``` ## File interactions ### Read file ```ps Get-Content $path ``` ### write to file ```ps Write-Host $text | Out-File $path ``` ## Operators ### Check if last command executed correctly ```ps # Do something echo $? ``` ### Looping #### For #### For each (MS Documentation)[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-7.2] ## Management ### Access remote PS server ```ps Enter-PSSession –ComputerName $hostname [-Credential username] ``` > If username gets left behind, the current user will be used ### Send command remotely ```ps Invoke-Command -ComputerName hostname1, hostname2 -ScroptBlock {$COMMAND} ``` ## Text formatting ### ? https://devblogs.microsoft.com/scripting/understanding-powershell-and-basic-string-formatting/ ## Objects ### Functions ### Classes https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_classes?view=powershell-7.2 [//]: # (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters?view=powershell-7.2) # Hypver-V specific ## Management [//]: # (https://adamtheautomator.com/hyper-v-powershell/) ### Create new host ```ps New-VM -Name "HYPER" -MemoryStartupBytes 512MB ``` ### List current VM Get-VM