diff --git a/students/modules/OpNotes/assets/images/.gitkeep b/students/modules/00_OpNotes/assets/images/.gitkeep similarity index 100% rename from students/modules/OpNotes/assets/images/.gitkeep rename to students/modules/00_OpNotes/assets/images/.gitkeep diff --git a/students/modules/OpNotes/assets/images/cht.sh-01.png b/students/modules/00_OpNotes/assets/images/cht.sh-01.png similarity index 100% rename from students/modules/OpNotes/assets/images/cht.sh-01.png rename to students/modules/00_OpNotes/assets/images/cht.sh-01.png diff --git a/students/modules/OpNotes/assets/images/git_01.png b/students/modules/00_OpNotes/assets/images/git_01.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_01.png rename to students/modules/00_OpNotes/assets/images/git_01.png diff --git a/students/modules/OpNotes/assets/images/git_02.png b/students/modules/00_OpNotes/assets/images/git_02.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_02.png rename to students/modules/00_OpNotes/assets/images/git_02.png diff --git a/students/modules/OpNotes/assets/images/git_03.png b/students/modules/00_OpNotes/assets/images/git_03.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_03.png rename to students/modules/00_OpNotes/assets/images/git_03.png diff --git a/students/modules/OpNotes/assets/images/git_04.png b/students/modules/00_OpNotes/assets/images/git_04.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_04.png rename to students/modules/00_OpNotes/assets/images/git_04.png diff --git a/students/modules/OpNotes/assets/images/git_05.png b/students/modules/00_OpNotes/assets/images/git_05.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_05.png rename to students/modules/00_OpNotes/assets/images/git_05.png diff --git a/students/modules/OpNotes/assets/images/git_06.png b/students/modules/00_OpNotes/assets/images/git_06.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_06.png rename to students/modules/00_OpNotes/assets/images/git_06.png diff --git a/students/modules/OpNotes/assets/images/git_07.png b/students/modules/00_OpNotes/assets/images/git_07.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_07.png rename to students/modules/00_OpNotes/assets/images/git_07.png diff --git a/students/modules/OpNotes/assets/images/git_08.png b/students/modules/00_OpNotes/assets/images/git_08.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_08.png rename to students/modules/00_OpNotes/assets/images/git_08.png diff --git a/students/modules/OpNotes/assets/images/git_09.png b/students/modules/00_OpNotes/assets/images/git_09.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_09.png rename to students/modules/00_OpNotes/assets/images/git_09.png diff --git a/students/modules/OpNotes/assets/images/git_10.png b/students/modules/00_OpNotes/assets/images/git_10.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_10.png rename to students/modules/00_OpNotes/assets/images/git_10.png diff --git a/students/modules/OpNotes/assets/images/git_11.png b/students/modules/00_OpNotes/assets/images/git_11.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_11.png rename to students/modules/00_OpNotes/assets/images/git_11.png diff --git a/students/modules/OpNotes/assets/images/git_12.png b/students/modules/00_OpNotes/assets/images/git_12.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_12.png rename to students/modules/00_OpNotes/assets/images/git_12.png diff --git a/students/modules/OpNotes/assets/images/git_13.png b/students/modules/00_OpNotes/assets/images/git_13.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_13.png rename to students/modules/00_OpNotes/assets/images/git_13.png diff --git a/students/modules/OpNotes/assets/images/git_14.png b/students/modules/00_OpNotes/assets/images/git_14.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_14.png rename to students/modules/00_OpNotes/assets/images/git_14.png diff --git a/students/modules/OpNotes/assets/images/git_15.png b/students/modules/00_OpNotes/assets/images/git_15.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_15.png rename to students/modules/00_OpNotes/assets/images/git_15.png diff --git a/students/modules/OpNotes/assets/images/git_16.png b/students/modules/00_OpNotes/assets/images/git_16.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_16.png rename to students/modules/00_OpNotes/assets/images/git_16.png diff --git a/students/modules/OpNotes/assets/images/git_17.png b/students/modules/00_OpNotes/assets/images/git_17.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_17.png rename to students/modules/00_OpNotes/assets/images/git_17.png diff --git a/students/modules/OpNotes/assets/images/git_workflow.png b/students/modules/00_OpNotes/assets/images/git_workflow.png similarity index 100% rename from students/modules/OpNotes/assets/images/git_workflow.png rename to students/modules/00_OpNotes/assets/images/git_workflow.png diff --git a/students/modules/OpNotes/examples/.gitkeep b/students/modules/00_OpNotes/examples/.gitkeep similarity index 100% rename from students/modules/OpNotes/examples/.gitkeep rename to students/modules/00_OpNotes/examples/.gitkeep diff --git a/students/modules/OpNotes/examples/os_modules_000_opnotes_examples_demo-cht.tty b/students/modules/00_OpNotes/examples/os_modules_000_opnotes_examples_demo-cht.tty similarity index 100% rename from students/modules/OpNotes/examples/os_modules_000_opnotes_examples_demo-cht.tty rename to students/modules/00_OpNotes/examples/os_modules_000_opnotes_examples_demo-cht.tty diff --git a/students/modules/OpNotes/nav.adoc b/students/modules/00_OpNotes/nav.adoc similarity index 100% rename from students/modules/OpNotes/nav.adoc rename to students/modules/00_OpNotes/nav.adoc diff --git a/students/modules/OpNotes/pages/.gitkeep b/students/modules/00_OpNotes/pages/.gitkeep similarity index 100% rename from students/modules/OpNotes/pages/.gitkeep rename to students/modules/00_OpNotes/pages/.gitkeep diff --git a/students/modules/OpNotes/pages/Google_fu.adoc b/students/modules/00_OpNotes/pages/Google_fu.adoc similarity index 100% rename from students/modules/OpNotes/pages/Google_fu.adoc rename to students/modules/00_OpNotes/pages/Google_fu.adoc diff --git a/students/modules/OpNotes/pages/OS_Day0_SG.adoc b/students/modules/00_OpNotes/pages/OS_Day0_SG.adoc similarity index 100% rename from students/modules/OpNotes/pages/OS_Day0_SG.adoc rename to students/modules/00_OpNotes/pages/OS_Day0_SG.adoc diff --git a/students/modules/OpNotes/pages/cht.adoc b/students/modules/00_OpNotes/pages/cht.adoc similarity index 100% rename from students/modules/OpNotes/pages/cht.adoc rename to students/modules/00_OpNotes/pages/cht.adoc diff --git a/students/modules/OpNotes/pages/git_about.adoc b/students/modules/00_OpNotes/pages/git_about.adoc similarity index 100% rename from students/modules/OpNotes/pages/git_about.adoc rename to students/modules/00_OpNotes/pages/git_about.adoc diff --git a/students/modules/OpNotes/pages/git_workflow_basics-brief.adoc b/students/modules/00_OpNotes/pages/git_workflow_basics-brief.adoc similarity index 100% rename from students/modules/OpNotes/pages/git_workflow_basics-brief.adoc rename to students/modules/00_OpNotes/pages/git_workflow_basics-brief.adoc diff --git a/students/modules/OpNotes/pages/git_workflow_basics_visual_.adoc b/students/modules/00_OpNotes/pages/git_workflow_basics_visual_.adoc similarity index 100% rename from students/modules/OpNotes/pages/git_workflow_basics_visual_.adoc rename to students/modules/00_OpNotes/pages/git_workflow_basics_visual_.adoc diff --git a/students/modules/01_PowerShell/.gitkeep b/students/modules/01_PowerShell/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/students/modules/01_PowerShell/assets/.gitkeep b/students/modules/01_PowerShell/assets/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/students/modules/01_PowerShell/assets/attachments/.gitkeep b/students/modules/01_PowerShell/assets/attachments/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/students/modules/01_PowerShell/assets/attachments/.gitkeep @@ -0,0 +1 @@ + diff --git a/students/modules/01_PowerShell/assets/attachments/PSPunctuationWallChart.pdf b/students/modules/01_PowerShell/assets/attachments/PSPunctuationWallChart.pdf new file mode 100644 index 0000000000000000000000000000000000000000..919d9e2b189f1c3fe7f5c665056ed3055fb9656e Binary files /dev/null and b/students/modules/01_PowerShell/assets/attachments/PSPunctuationWallChart.pdf differ diff --git a/students/modules/01_PowerShell/assets/attachments/WMI_CheatSheet_for_PS.pdf b/students/modules/01_PowerShell/assets/attachments/WMI_CheatSheet_for_PS.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e45134e2ecba63319b728e21aeabbbb6d9acbe2 Binary files /dev/null and b/students/modules/01_PowerShell/assets/attachments/WMI_CheatSheet_for_PS.pdf differ diff --git a/students/modules/01_PowerShell/assets/attachments/powershell-basic-cheat-sheet.pdf b/students/modules/01_PowerShell/assets/attachments/powershell-basic-cheat-sheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e7d47688d1765831f8718f52434e34afd10d709a Binary files /dev/null and b/students/modules/01_PowerShell/assets/attachments/powershell-basic-cheat-sheet.pdf differ diff --git a/students/modules/01_PowerShell/assets/images/.gitkeep b/students/modules/01_PowerShell/assets/images/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/students/modules/01_PowerShell/assets/videos/.gitkeep b/students/modules/01_PowerShell/assets/videos/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/students/modules/01_PowerShell/examples/.gitkeep b/students/modules/01_PowerShell/examples/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/students/modules/01_PowerShell/examples/basics.ps1 b/students/modules/01_PowerShell/examples/basics.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..0a69395f32ee8cfe4a5b5cfbb45d1604be2b358c --- /dev/null +++ b/students/modules/01_PowerShell/examples/basics.ps1 @@ -0,0 +1,61 @@ +#---- Setup + # Install + function Install-Chocolatey + { + if (!(get-command choco.exe -ErrorAction SilentlyContinue)) + { + Set-ExecutionPolicy Bypass -Scope Process -Force; + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; + iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) + } + } + +#---- Get-Help: + +# !!! Most Important PowerShell Command !!! + $command = Get-ChildItem + get-help $command -Examples + +#---- Get-Command: + + # Display all commands ending in the NOUN 'process' + Get-Command *process | Select-Object -First 10 + + # Display all commands ending in the VERB 'set' + Get-Command wait* | Select-Object -First 10 + +#---- Get-Content + +#---- Get-ChildItem: + + # Recursive ls and show hidden files + Get-ChildItem -Recurse -Force + Get-ChildItem -attributes hidden + +#---- Get-PSDrive: Gets the PowerShell + + <# + The Get-PSDrive cmdlet gets the drives in the current session. You can get a particular drive or all drives in the session. + This cmdlet gets the following types of drives: + - Windows logical drives on the computer, including drives mapped to network shares. + - Drives exposed by Windows PowerShell providers (such as the Certificate:, Function:, and Alias: drives) + and the HKLM: and HKCU: drives that are exposed by the Windows PowerShell Registry provider. + - Session-specified temporary drives and persistent mapped network drives that you create by using the New-PSDrive cmdlet. + #> + Get-PSDrive + # View Alias + Get-ChildItem Alias:\ + # View Functions + Get-ChildItem Function:\ + # View Registry Keys + Get-ChildItem HKCU:\ + +#---- Starting and Killing processes + + Start-Process calc + (Get-Process calculator*).kill() + +#---- In order to run scripts in PowerShell + + Get-ExecutionPolicy + Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser diff --git a/students/modules/01_PowerShell/examples/objects.ps1 b/students/modules/01_PowerShell/examples/objects.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..d544d6819b588f4c3d7caf6c1dda2d1ff8938648 --- /dev/null +++ b/students/modules/01_PowerShell/examples/objects.ps1 @@ -0,0 +1,89 @@ +# ---- SETUP STEPS ---- # + Set-Location $HOME + New-Item -ItemType Directory -Name class + Set-Location class + Write-Host "Hello World" > hello.txt + Write-Host "Some Code" > hello2.ps1 + 1..4 | ForEach-Object {Write-Output "Hello $_" > file$_.txt} + +#---- Object Types + # Returns INT32 Object + 42 | Get-Member + # Returns Double Object + 42.0 | Get-Member + # Returns STRING Object + "42" | Get-Member + +#---- Viewing object structure - Get-Member + + # Display all of the properties and methods of the 'Get-Process' PowerShell object. + Get-ChildItem | Get-Member + # Display only the properties of the + Get-ChildItem | Get-Member -MemberType properties + +#---- Selecting parts of object - Select-Object + + # Show all the parts of the file 'hello.txt' + Get-ChildItem .\hello.txt | Select-Object * + Get-ChildItem .\hello.txt | Select-Object CreationTime, FullName, Length + # Show First X Items + Get-ChildItem | Select-Object -First 1 + # Show Last X Items + Get-ChildItem | Select-Object -Last 2 + # Show the Xth item (starting with index 0) + Get-ChildItem | Select-Object -Index 1 + +#---- Removing objects from the pipeline - Where-Object + + # Display only the objects whose value is less then 3 + 1..4 | Where-Object {$_ -lt 3} + # Display files with the number 2 in them. + Get-ChildItem | Where-Object {$_.Name -like "*2*" } + Get-ChildItem | Where-Object {$_.Name -match "2" -and $_.name -like "*.sh"} + +#---- Sorting objects + + # Display sorted directory contents name + Get-ChildItem | Sort-Object -Property Name + # Display sorted directory contents by the 'Last Write Time UTC' in Reverse Order + Get-ChildItem | Sort-Object -Property LastWriteTimeUtc -Descending + +#---- Repeating a task for multiple objects - ForEach-Object + + # Divides each INT object by 1024 + 30000, 56798, 12432 | ForEach-Object -Process {$_/1024} + + # Display the name and size of the file divided by 10 + Get-ChildItem | ForEach-Object -Process {$_.Name; $_.Length / 10; " " } + + +#---- Using Variables, static classes, and methods + + # Set an object to a variable + $Directory = Get-ChildItem -Path ..\ -Directory + $Directory | Where-Object {$_.Name -match "class"} | Get-Member * + $Directory | Where-Object {$_.Name -match "class"} | Format-List -Property * + $Directory.GetType() + + <#---- .Net Class Member Notation + To call a static member put the class name in square brackets and use the double colon before the member name. + Windows PowerShell is flexible enough, that you can write Windows PowerShell code as if it were C#, VB.NET, or even as if it were VBScript or Perl + #> + # Use a static Class to do Maths. + [System.Math] | Get-Member -Static + [System.Math]::Sqrt(9) + [System.Math]::PI + + # Using Parenthesis allows you to access object methods and properties + (Get-ChildItem | Select-Object -Index 0).fullname + (Get-ChildItem | Select-Object -Index 0).Name + (Get-Content .\hello.txt).count + +#---- Getting WMI objects - Get-CimInstance + <# + Windows Management Instrumentation (WMI) is a core technology for Windows system administration because it + exposes a wide range of information in a uniform manner. Because of how much WMI makes possible, + the PowerShell cmdlet for accessing WMI objects, Get-CimInstance, is one of the most useful for doing real work. + #> + Get-CimInstance -Class Win32_ComputerSystem + Get-CimInstance -Class Win32_AccountSID \ No newline at end of file diff --git a/students/modules/01_PowerShell/examples/profile.ps1 b/students/modules/01_PowerShell/examples/profile.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..406808bf8be95cf787b170e447bb990d0aab889d --- /dev/null +++ b/students/modules/01_PowerShell/examples/profile.ps1 @@ -0,0 +1,80 @@ +#---- Profile Setup + # View the different types(scopes) of profiles + $profile | gm -type NoteProperty + # View current session profile + $profile + # Check if you already have a profile file created + test-path -path $profile.CurrentUserCurrentHost + # Create new profile file + New-Item -ItemType file -path $profile -Force + +# View the Script that sets your current prompt + (Get-Command Prompt).ScriptBlock + +# Show Aliases + Get-Alias | Select-Object -First 10 + Remove-Item Alias:ls + +# Show Functions + Get-Command mkdir |Format-List -Property Name, Definition + Get-ChildItem Function:\mkdir | Format-List ScriptBlock + +# ------------------------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------------------------# +# ------------------------------------Demo Profile------------------------------------------------# +# ------------------------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------------------------# + +# Find out if the current user identity is elevated (has admin rights) +$identity = [Security.Principal.WindowsIdentity]::GetCurrent() +$principal = New-Object Security.Principal.WindowsPrincipal $identity +$isAdmin = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) + +# If so and the current host is a command line, then change to red color +# as warning to user that they are operating in an elevated context +if (($host.Name -match "ConsoleHost") -and ($isAdmin)) +{ + $host.UI.RawUI.BackgroundColor = "DarkRed" + $host.PrivateData.ErrorBackgroundColor = "White" + $host.PrivateData.ErrorForegroundColor = "DarkRed" + Clear-Host +} + +# Set up command prompt and window title. Use UNIX-style convention for identifying +# whether user is elevated (root) or not. Window title shows current version of PowerShell +# and appends [ADMIN] if appropriate for easy taskbar identification +function prompt +{ + if ($isAdmin) + { + "[" + (Get-Location) + "] # " + } + else + { + "[" + (Get-Location) + "] $ " + } +} + +$Host.UI.RawUI.WindowTitle = "PowerShell {0}" -f $PSVersionTable.PSVersion.ToString() +if ($isAdmin) +{ + $Host.UI.RawUI.WindowTitle += " [ADMIN]" +} + +# Change Directory to 'c:\users\user\' +cd $home + +# Compute file hashes - useful for checking successful downloads +function md5 { Get-FileHash -Algorithm MD5 $args } +function sha1 { Get-FileHash -Algorithm SHA1 $args } +function sha256 { Get-FileHash -Algorithm SHA256 $args } +function less +{ + Get-Content $args[0] | Out-Host -Paging +} + +#Set-Alias -Name -Value +Set-Alias -Name gh -Value Get-Help +Set-Alias -Name so -Value Select-Object +Set-Alias -Name c -Value Clear-Host +Set-Alias -Name l -Value Get-ChildItem diff --git a/students/modules/01_PowerShell/examples/web.ps1 b/students/modules/01_PowerShell/examples/web.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..3d1ce2958691752d70cff1180f61e905008fbb69 --- /dev/null +++ b/students/modules/01_PowerShell/examples/web.ps1 @@ -0,0 +1,39 @@ +#---- PowerShell Remoting ---- + # XFREERDP (Or SPICE) -> win-ops + # RDP -> Admin + # PSSession -> Domain + + # Start a PSSession on remote machine + Enter-Pssession -ComputerName $COMPUTER_NAME -Credential ARMY\john.huntsman + + # Shows PS Session Config State + Get-PSSessionConfiguration + # Enable + Enable-PSRemoting + Get-PSSessionConfiguration + Get-Item WSMan:\localhost\Client\TrustedHosts + Set-Item WSMan:\localhost\Client\TrustedHosts -value "IP" -Concatenate + +# Invoke-Webrequest (wget) + Invoke-WebRequest -Uri "10.50.25.3/class/admin_station/PsExec.exe" -OutFile "C:\windows\system32\psexec.exe" + +# Using a Net.WebClient Object + $WebClient = New-Object System.Net.WebClient + $WebClient.Credentials = New-Object System.Net.Networkcredential($Username, $Password) + $Url = "https://github.com/PowerShell/Win32-OpenSSH/releases/download/v7.7.2.0p1-Beta/OpenSSH-Win64.zip" + $Path = "C:\Program Files\OpenSSH.zip" + $WebClient.DownloadFile( $url, $path ) + +# Or + + (New-Object System.Net.WebClient).DownloadFile($url, $path) + + +# Accessing different fields of communication over HTTP + $response = Invoke-WebRequest -UseBasicParsing 'https://postman-echo.com/get?foo1=bar1&foo2=bar2' + $response.StatusCode + $response.Headers + $response.Content + $response.RawContent + $response.StatusDescription + diff --git a/students/modules/01_PowerShell/pages/.gitkeep b/students/modules/01_PowerShell/pages/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/students/modules/01_PowerShell/pages/powershell_sfg.adoc b/students/modules/01_PowerShell/pages/powershell_sfg.adoc new file mode 100644 index 0000000000000000000000000000000000000000..99b966176d7b4ea930c393ad5a686374dfa875cc --- /dev/null +++ b/students/modules/01_PowerShell/pages/powershell_sfg.adoc @@ -0,0 +1,59 @@ +:pdf: true +:doctype: book +:stylesheet: ../../global-objects/resources/raw/master/css/stylefactoryfiles/_asciidoc.scss +:imagesdir: ../assets/images +:numbered!: + += PowerShell + +== Table of Contents +**<<Table of Contents>>** + +<<Prerequisite Instructions>> + +<<Section 1>> + + +== LESSON Objectives + +* *Outcome:* +** OUTCOME 1 - Become Familiar with PowerShell Syntax +** OUTCOME 2 - Understand Basic Enumeration Commands + +== Prerequisite Instructions + + +*From WinOpstation:* + +. Install *Git Bash* `https://git-scm.com/downloads` and choose the Windows Install. +. Type "Git Bash" into the start bar and start the program. You will be in a Bash shell, but on a Windows box. This shell is made for the express purpose of using `git` commands. (Not actually running linux at all) +.. In Git Bash Terminal: `git clone https://git.cybbh.space/cctc/students.git` +. Open an elevated PowerShell ISE shell +. Navigate to the scripts: `cd C:\user\student\students\modules\01_powershell\examples\` + +== Section 1 + +=== _Demo Scripts_ + +Run the following scripts in an elevated PowerShell ISE: + +[source,powershell] +---- +.\basics.ps1 # Need to know fundamentals +.\objects.ps1 # Introduction to PowerShell Objects +.\profile.ps1 # Setting up user profile and environment +.\web.ps1 # Powershell over the Internet +---- + +=== _Knowledge Benchmarks_ + +* Understand the fundamental differences between PowerShell and other traditional style shells. +* Explain the significance of the profile files and how to utilize them for efficiency and persistence. + +* Run commands remotely, download files, and interface with Web API's + +.Resources +* https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scripts?view=powershell-5.1[Microsoft Docs] +* https://mcpmag.com/articles/2015/03/24/using-get-member.aspx[Using Get Member] +* https://cdn.comparitech.com/wp-content/uploads/2018/08/Comparitech-Powershell-cheatsheet.pdf[Powershell Cheat 1] +* https://blogs.sans.org/pen-testing/files/2016/05/PowerShellCheatSheet_v41.pdf[Powershell Cheat 2] +* https://docs.microsoft.com/en-us/powershell/scripting/samples/viewing-object-structure\--get-member-?view=powershell-7.1[Working with Objects Guide] +* https://docs.microsoft.com/en-us/powershell/scripting/samples/sample-scripts-for-administration?view=powershell-7[Powershell 7 Sample Scripts] +* https://davidhamann.de/2019/04/12/powershell-invoke-webrequest-by-example/[Invoke-WebRequest Example] \ No newline at end of file