Rename folder Docs to docs

This commit is contained in:
Markus Fleschutz
2023-10-31 11:05:01 +01:00
parent 0915de8f8b
commit 893273739a
900 changed files with 304 additions and 304 deletions

167
docs/FAQ.md Normal file
View File

@ -0,0 +1,167 @@
![](powershell_black_icon_64x64.png) PowerShell FAQ
===================================================
<details><summary>What is PowerShell?</summary>
**PowerShell is a task automation and configuration management framework from Microsoft, consisting of a command-line shell and associated scripting language.**
</details>
<details><summary>Why use PowerShell?</summary>
✔️ **It's powerful** - fully control your computer
✔️ **It's easy to learn** - see the tutorial at: https://www.guru99.com/powershell-tutorial.html
✔️ **It's cross-platform** - available for Linux, Mac OS and Windows
✔️ **It's open-source and free** - see the Github repository at: https://github.com/PowerShell/PowerShell
✔️ **It's fully documented** - see the official documentation at: https://docs.microsoft.com/en-us/powershell
</details>
<details><summary>How to install PowerShell on Linux?</summary>
1. **On Linux with Snap support just execute:**
```
$ snap install PowerShell
$ ln -s /snap/bin/pwsh /usr/bin/pwsh
```
2. **Otherwise, please visit:** https://github.com/PowerShell/PowerShell **and scroll down to: 'Get PowerShell'.**
</details>
<details><summary>How to install PowerShell on MacOS?</summary>
**Please visit:** https://github.com/PowerShell/PowerShell **and scroll down to: 'Get PowerShell'.**
</details>
<details><summary>How to install PowerShell on Windows?</summary>
**Good news:** it's preinstalled, **but** the script execution policy is *restricted* (forbidden) by default! To change this: open the *Windows PowerShell (Admin)* console and enter:
```
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```
**NOTE:** the group policy object (GPO) settings of your organization might disallow changes. In that case contact your system administrator for help.
</details>
<details><summary>How to get the Mega collection of PowerShell scripts?</summary>
1. **When using Git, execute in a terminal window:** `> git clone https://github.com/fleschutz/PowerShell`
2. **Otherwise, download and unzip it from:** https://github.com/fleschutz/PowerShell/archive/master.zip
</details>
<details><summary>How to execute PowerShell scripts on Windows?</summary>
1. **In the Windows desktop:** right-click the script and select: *Execute with PowerShell*
2. **On the command-line:** launch a terminal application (e.g. *Windows Terminal*), then type: `./<SCRIPT>.ps1`.
3. **By remote login:** use *SSH* to login to the Windows machine, then type: `cd <PATH>`, then: `./<SCRIPT>.ps1`.
4. **By context menu:** see below.
5. **By voice control:** see repo [talk2windows](https://github.com/fleschutz/talk2windows) for more information.
6. **By automation software:** see [Jenkins.io](https://www.jenkins.io) or [AutoHotKey.com](https://www.autohotkey.com/) for more information.
7. **Automatically on login:** see below.
</details>
<details><summary>How to execute PowerShell scripts in Windows context menus?</summary>
* To enable "right-click > New > Windows PowerShell Script" execute `Add_ps1_to_New_context_menu.reg` in subfolder [Data/](../Data)
* To disable this execute `Remove_ps1_from_New_context_menu.reg` in subfolder [Data/](../Data)
</details>
<details><summary>How to execute PowerShell scripts automatically on login in Windows?</summary>
1. **Open the *File Explorer* with your Autostart folder** (usually at: `C:\Users\YOUR_USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`).
2. **Copy the script (or a link to it) into this folder.**
</details>
<details><summary>How to execute PowerShell scripts in Jenkins?</summary>
1. **Install the Jenkins plugin:** `PowerShell plugin` (it uses PowerShell.exe on Windows and pwsh on Linux).
2. **Add or reference your PowerShell scripts in the Jenkins jobs or in your Jenkinsfiles.**
</details>
<details><summary>How to learn PowerShell?</summary>
* **Please find tutorials at:** https://www.guru99.com/powershell-tutorial.html
* **See a cheat sheet at:** [PowerShell/Docs/cheat-sheet.md](cheat-sheet.md)
* **The official PowerShell documentation can be found here:** https://docs.microsoft.com/en-us/powershell/
</details>
<details><summary>What about security?</summary>
1. **Execute scripts only that you trust (and/or where you have checked the code before)!**
2. **Prefer SSH Remoting instead of PowerShell Remoting**
3. **More recommendations by NSA and cyber security centers in the U.S. (CISA), New Zealand (NZ NCSC), and the U.K. (NCSC-UK) can be found here:** https://media.defense.gov/2022/Jun/22/2003021689/-1/-1/1/CSI_KEEPING_POWERSHELL_SECURITY_MEASURES_TO_USE_AND_EMBRACE_20220622.PDF
</details>
<details><summary>Why do some scripts show gibberish characters?</summary>
**Your current terminal application doesn't support Unicode characters used by those PowerShell scripts.**
**Use a modern one such as *Windows Terminal*, please.**
</details>
<details><summary>How to configure PowerShell as my default shell on Linux?</summary>
**Make sure PowerShell is installed, then execute: `chsh -s /usr/bin/pwsh USERNAME`. In case you experience an "invalid shell" error, add "/usr/bin/pwsh" to /etc/shells.**
</details>
<details><summary>How to install a custom PowerShell profile?</summary>
**Execute: `./set-profile.ps1` in the *Scripts* subfolder, this will install **my-profile.ps1** as your PowerShell profile. It's a nice looking base profile, but can easily be changed to your needs.**
</details>
<details><summary>How to add the scripts to the search path?</summary>
Want to use the PowerShell scripts everywhere on the command-line? Then you need to add the Scripts/ subfolder to the search path:
* **On Linux using Bash:** edit .profile in your home directory and add the line: PATH="$PATH:/path/to/PowerShell/Scripts"
* **On Windows:** open Settings > System > About > Advanced system settings > Environment Variables, edit the user's variable "Path", and add the full path to the Scripts/ directory.
</details>
<details><summary>Which editor to use for PowerShell scripts?</summary>
* **Visual Studio Code** - it supports syntax highlighting, on-the-fly problem checking and an integrated PowerShell Console (available for free on Linux, Mac OS and Windows, now recommended by Microsoft).
* **PowerShell ISE** (Integrated Scripting Environment) - the former official PowerShell development environment included with Microsoft Windows.
* **PowerShell Studio** - a powerful PowerShell IDE with module, help, and user interface development tools, high DPI support and regular updates.
* **PowerShell Plus** - an all in one IDE.
* **Atom package** - an add-on with PowerShell language support for Atom.
* **SublimeText package** - an add-on with PowerShell language support for Sublime Text.
* or simply your **favorite text editor** as an alternative.
</details>
<details><summary>How to write good PowerShell scripts?</summary>
**Good PowerShell scripts are both user-friendly and platform-independent. As a starting point I recommend the following:**
* Use the `<verb>-<noun>.ps1` scheme for filenames (e.g. *new-symlink.ps1*). Official approved verbs can be found here: [https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands](https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands)
* Use **UTF-8 BOM** encoding to support Unicode characters in the script.
* Add a **comment-based help** at the beginning with: `.SYNOPSIS`, `.DESCRIPTION`, `.PARAMETER`, `.EXAMPLE`, `.LINK`, and `.NOTES`.
* Check the **requirements** for the script, e.g. `#Requires -RunAsAdministrator`, or `#Requires -Version 3`
* Prefer **command-line options**, else ask the user for help
* Recommended is **Set-StrictMode -Version Latest** to enable additional error checking.
* For readibility use **lowerCamelCase** to name variables, functions, etc.
* Set execute file permissions for Linux: **chmod a+rx <filename>**
* On success exit with error code 0 (**exit 0**), otherwise print the error with keyword **ERROR:** (to support log parsers) and exit the error code (mostly 1)
</details>
<details><summary>Where's the Star History of this repository?</summary>
[![Star History Chart](https://api.star-history.com/svg?repos=fleschutz/PowerShell&type=Date)](https://star-history.com/#fleschutz/PowerShell&Date)
</details>
<details><summary>How to contribute or how to report a bug?</summary>
**If you find something bad (like a bug, error, or any issue), please report it here by opening an Issue.**
**Or even better: Fork the repository, add or fix the script and submit a pull request, so others can participate too.**
</details>
<details><summary>How to donate to this project?</summary>
**Thanks a lot! Just follow this link:** [https://www.paypal.com/paypalme/Fleschutz](https://www.paypal.com/paypalme/Fleschutz)
</details>
<details><summary>What if my question is not answered here?</summary>
**Just send your question by e-mail to:** `markus.fleschutz [at] gmail.com`
</details>

66
docs/Windefende.md Normal file
View File

@ -0,0 +1,66 @@
Windefender.ps1
================
This PowerShell script check for windwos defender status and also turn off/on real time monitoring of windows defender.
Example
-------
```powershell
PS> ./Windefender.ps1
```
<#
.SYNOPSIS
Windows defender in powershell
.DESCRIPTION
This script can enable disable and show windows defender real time monitoring!
.EXAMPLE
PS> ./Windefender.ps1
.LINK
https://github.com/pakoti/Awesome_Sysadmin
.NOTES
Author: Dark Master | License: CC0-1,0
#>
$defender = Get-MpPreference
$userInput = Read-Host "Enter an option:
[1] Disable real time monitoring
[2] Enable real time monitoring
[3] Check status
"
switch($userInput) {
1 {
$defender.DisableRealtimeMonitoring = $true
$defender | Set-MpPreference
Write-Host "Real-time monitoring of Windows Defender has been disabled."
break
}
2 {
$defender.DisableRealtimeMonitoring = $false
$defender | Set-MpPreference
Write-Host "Real-time monitoring of Windows Defender has been enabled."
break
}
3 {
if($defender.DisableRealtimeMonitoring) {
Write-Host "Real-time monitoring of Windows Defender is currently disabled."
} else {
Write-Host "Real-time monitoring of Windows Defender is currently enabled."
}
break
}
default {
Write-Host "Invalid option selected."
break
}
}

85
docs/Windefender.md Normal file
View File

@ -0,0 +1,85 @@
*Windefender.ps1*
================
This script can enable disable and show windows defender real time monitoring!
Parameters
----------
```powershell
PS> ./Windefender.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./Windefender.ps1
```
Notes
-----
Author: Dark Master | License: CC0-1,0
Related Links
-------------
https://github.com/pakoti/Awesome_Sysadmin
Script Content
--------------
```powershell
<#
.SYNOPSIS
Windows defender in powershell
.DESCRIPTION
This script can enable disable and show windows defender real time monitoring!
.EXAMPLE
PS> ./Windefender.ps1
.LINK
https://github.com/pakoti/Awesome_Sysadmin
.NOTES
Author: Dark Master | License: CC0-1,0
#>
$defender = Get-MpPreference
$userInput = Read-Host "Enter an option:
[1] Disable real time monitoring
[2] Enable real time monitoring
[3] Check status
"
switch($userInput) {
1 {
$defender.DisableRealtimeMonitoring = $true
$defender | Set-MpPreference
Write-Host "Real-time monitoring of Windows Defender has been disabled."
break
}
2 {
$defender.DisableRealtimeMonitoring = $false
$defender | Set-MpPreference
Write-Host "Real-time monitoring of Windows Defender has been enabled."
break
}
3 {
if($defender.DisableRealtimeMonitoring) {
Write-Host "Real-time monitoring of Windows Defender is currently disabled."
} else {
Write-Host "Real-time monitoring of Windows Defender is currently enabled."
}
break
}
default {
Write-Host "Invalid option selected."
break
}
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of Windefender.ps1 as of 10/19/2023 08:11:43)*

116
docs/add-firewall-rules.md Normal file
View File

@ -0,0 +1,116 @@
*add-firewall-rules.ps1*
================
This PowerShell script adds firewall rules for the given executable. Administrator rights are required.
Parameters
----------
```powershell
PS> ./add-firewall-rules.ps1 [[-PathToExecutables] <String>] [[-Direction] <String>] [[-FirewallProfile] <Array>] [<CommonParameters>]
-PathToExecutables <String>
Specifies the path to the executables.
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
-Direction <String>
Specifies the direction for the firewall rule. Can be 'Inbound' or 'Outbound'. Default is 'Inbound'.
Required? false
Position? 2
Default value Inbound
Accept pipeline input? false
Accept wildcard characters? false
-FirewallProfile <Array>
Required? false
Position? 3
Default value @("Domain", "Private")
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./add-firewall-rules.ps1 -PathToExecutables C:\MyApp\bin -Direction Outbound -Profile Private
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Adds firewall rules for executables (needs admin rights).
.DESCRIPTION
This PowerShell script adds firewall rules for the given executable. Administrator rights are required.
.PARAMETER PathToExecutables
Specifies the path to the executables.
.PARAMETER Direction
Specifies the direction for the firewall rule. Can be 'Inbound' or 'Outbound'. Default is 'Inbound'.
.PARAMETER Profile
Specifies the firewall profile. Can be 'Domain', 'Private', or 'Public'. Multiple values can be specified as an array.
.EXAMPLE
PS> ./add-firewall-rules.ps1 -PathToExecutables C:\MyApp\bin -Direction Outbound -Profile Private
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
#Requires -RunAsAdministrator
param(
[string]$PathToExecutables = "",
[string]$Direction = "Inbound",
[array]$FirewallProfile = @("Domain", "Private")
)
try {
if (-not $PathToExecutables) {
$PathToExecutables = Read-Host "Enter path to executables"
}
$AbsPath = Convert-Path -Path $PathToExecutables
$Executables = Get-ChildItem -Path $AbsPath -Filter "*.exe"
if (-not $Executables) {
Write-Warning "No executables found. No Firewall rules have been created."
Read-Host "Press Enter to continue..."
return
}
foreach ($exe in $Executables) {
$exeName = $exe.Name
$exeFullPath = $exe.FullName
Write-Output "Adding firewall rule for $exeName"
New-NetFirewallRule -DisplayName $exeName -Direction $Direction -Program $exeFullPath -Profile $FirewallProfile -Action Allow
}
Write-Host -ForegroundColor Green "Done"
} catch {
Write-Error "Error in line $($_.InvocationInfo.ScriptLineNumber): $($_.Exception.Message)"
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of add-firewall-rules.ps1 as of 10/19/2023 08:11:35)*

82
docs/add-memo.md Normal file
View File

@ -0,0 +1,82 @@
*add-memo.ps1*
================
This PowerShell script saves the given memo text to Memos.csv in your home folder.
Parameters
----------
```powershell
PS> ./add-memo.ps1 [[-text] <String>] [<CommonParameters>]
-text <String>
Specifies the text to memorize
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./add-memo.ps1 "Buy apples"
saved to 📄/home/markus/Memos.csv
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Adds a memo text
.DESCRIPTION
This PowerShell script saves the given memo text to Memos.csv in your home folder.
.PARAMETER text
Specifies the text to memorize
.EXAMPLE
PS> ./add-memo.ps1 "Buy apples"
✔️ saved to 📄/home/markus/Memos.csv
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$text = "")
try {
if ($text -eq "" ) { $text = Read-Host "Enter the text to memorize" }
$Path = "~/Memos.csv"
$Time = Get-Date -format FileDateTimeUniversal
$Line = "$Time,$text"
if (-not(Test-Path "$Path" -pathType leaf)) {
Write-Output "TIME,TEXT" > "$Path"
}
Write-Output $Line >> "$Path"
"✔️ saved to 📄$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of add-memo.ps1 as of 10/19/2023 08:11:35)*

74
docs/alert.md Normal file
View File

@ -0,0 +1,74 @@
*alert.ps1*
================
This PowerShell script handles and escalates the given alert message.
Parameters
----------
```powershell
PS> ./alert.ps1 [[-Message] <String>] [<CommonParameters>]
-Message <String>
Specifies the alert message
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./alert.ps1 "Harddisk failure"
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Handles and escalates an alert
.DESCRIPTION
This PowerShell script handles and escalates the given alert message.
.PARAMETER message
Specifies the alert message
.EXAMPLE
PS> ./alert.ps1 "Harddisk failure"
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Message = "")
try {
if ($Message -eq "" ) { $URL = read-host "Enter alert message" }
echo "ALERT: $Message"
curl --header "Access-Token: o.PZl5XCp6SBl4F5PpaNXGDfFpUJZKAlEb" --header "Content-Type: application/json" --data-binary '{"type": "note", "title": "ALERT", "body": "$Message"}' --request POST https://api.pushbullet.com/v2/pushes
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of alert.ps1 as of 10/19/2023 08:11:35)*

192
docs/build-repo.md Normal file
View File

@ -0,0 +1,192 @@
*build-repo.ps1*
================
This PowerShell script builds a Git repository by supporting build systems such as: autogen, cmake, configure, Gradle, Imakefile, Makefile, and Meson.
Parameters
----------
```powershell
PS> ./build-repo.ps1 [[-path] <String>] [<CommonParameters>]
-path <String>
Specifies the path to the Git repository (current working dir by default)
Required? false
Position? 1
Default value "$PWD"
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./build-repo.ps1 C:\Repos\ninja
Building 📂ninja using CMakeLists.txt into 📂ninja/_My_Build...
...
Built 📂ninja in 47 sec
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Builds a repository
.DESCRIPTION
This PowerShell script builds a Git repository by supporting build systems such as: autogen, cmake, configure, Gradle, Imakefile, Makefile, and Meson.
.PARAMETER path
Specifies the path to the Git repository (current working dir by default)
.EXAMPLE
PS> ./build-repo.ps1 C:\Repos\ninja
⏳ Building 📂ninja using CMakeLists.txt into 📂ninja/_My_Build...
...
✔️ Built 📂ninja in 47 sec
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$path = "$PWD")
function BuildInDir([string]$path) {
$dirName = (Get-Item "$path").Name
if (Test-Path "$path/CMakeLists.txt" -pathType leaf) {
"⏳ Building 📂$dirName by using CMake into 📂$dirName/_My_Build..."
if (-not(Test-Path "$path/_My_Build/" -pathType container)) {
& mkdir "$path/_My_Build/"
}
Set-Location "$path/_My_Build/"
& cmake ..
if ($lastExitCode -ne "0") { throw "Executing 'cmake ..' has failed" }
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
& make test
if ($lastExitCode -ne "0") { throw "Executing 'make test' has failed" }
} elseif (Test-Path "$path/configure" -pathType leaf) {
"⏳ Building 📂$dirName by using 'configure'..."
Set-Location "$path/"
& ./configure
#if ($lastExitCode -ne "0") { throw "Script 'configure' exited with error code $lastExitCode" }
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
& make test
if ($lastExitCode -ne "0") { throw "Executing 'make test' has failed" }
} elseif (Test-Path "$path/autogen.sh" -pathType leaf) {
"⏳ Building 📂$dirName by using 'autogen.sh'..."
Set-Location "$path/"
& ./autogen.sh
if ($lastExitCode -ne "0") { throw "Script 'autogen.sh' exited with error code $lastExitCode" }
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
} elseif (Test-Path "$path/build.gradle" -pathType leaf) {
"⏳ Building 📂$dirName by using Gradle..."
Set-Location "$path"
& gradle build
if ($lastExitCode -ne "0") { throw "'gradle build' has failed" }
& gradle test
if ($lastExitCode -ne "0") { throw "'gradle test' has failed" }
} elseif (Test-Path "$path/meson.build" -pathType leaf) {
"⏳ Building 📂$dirName by using Meson..."
Set-Location "$path"
& meson . build --prefix=/usr/local
if ($lastExitCode -ne "0") { throw "'meson . build' has failed" }
} elseif (Test-Path "$path/Imakefile" -pathType leaf) {
"⏳ Building 📂$dirName by using Imakefile..."
Set-Location "$path/"
& xmkmf
if ($lastExitCode -ne "0") { throw "Executing 'xmkmf' has failed" }
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
} elseif (Test-Path "$path/Makefile" -pathType leaf) {
"⏳ Building 📂$dirName by using Makefile..."
Set-Location "$path"
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
} elseif (Test-Path "$path/makefile" -pathType leaf) {
"⏳ Building 📂$dirName by using makefile..."
Set-Location "$path"
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
} elseif (Test-Path "$path/compile.sh" -pathType leaf) {
"⏳ Building 📂$dirName by using 'compile.sh'..."
Set-Location "$path/"
& ./compile.sh
if ($lastExitCode -ne "0") { throw "Script 'compile.sh' exited with error code $lastExitCode" }
& make -j4
if ($lastExitCode -ne "0") { throw "Executing 'make -j4' has failed" }
} elseif (Test-Path "$path/attower/src/build/DevBuild/build.bat" -pathType leaf) {
"⏳ Building 📂$dirName by using build.bat ..."
Set-Location "$path/attower/src/build/DevBuild/"
& ./build.bat build-all-release
if ($lastExitCode -ne "0") { throw "Script 'build.bat' exited with error code $lastExitCode" }
} elseif (Test-Path "$path/$dirName" -pathType container) {
"⏳ No make rule found, trying subfolder 📂$($dirName)..."
BuildInDir "$path/$dirName"
} else {
Write-Warning "Sorry, no make rule applies to: 📂$dirName"
exit 0 # success
}
}
try {
$stopWatch = [system.diagnostics.stopwatch]::startNew()
if (-not(Test-Path "$path" -pathType container)) { throw "Can't access directory: $path" }
$previousPath = Get-Location
BuildInDir "$path"
Set-Location "$previousPath"
$repoDirName = (Get-Item "$path").Name
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"✔️ Built 📂$repoDirName in $elapsed sec"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of build-repo.ps1 as of 10/19/2023 08:11:35)*

85
docs/build-repos.md Normal file
View File

@ -0,0 +1,85 @@
*build-repos.ps1*
================
This PowerShell script builds all Git repositories in a folder.
Parameters
----------
```powershell
PS> ./build-repos.ps1 [[-ParentDir] <String>] [<CommonParameters>]
-ParentDir <String>
Specifies the path to the parent folder
Required? false
Position? 1
Default value "$PWD"
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./build-repos.ps1 C:\MyRepos
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Builds Git repositories
.DESCRIPTION
This PowerShell script builds all Git repositories in a folder.
.PARAMETER ParentDir
Specifies the path to the parent folder
.EXAMPLE
PS> ./build-repos.ps1 C:\MyRepos
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$ParentDir = "$PWD")
try {
$StopWatch = [system.diagnostics.stopwatch]::startNew()
$ParentDirName = (Get-Item "$ParentDir").Name
"⏳ Step 1 - Checking parent folder 📂$ParentDirName..."
if (-not(Test-Path "$ParentDir" -pathType container)) { throw "Can't access folder: $ParentDir" }
$Folders = (Get-ChildItem "$ParentDir" -attributes Directory)
$FolderCount = $Folders.Count
"Found $FolderCount subfolders."
[int]$Step = 1
foreach ($Folder in $Folders) {
& "$PSScriptRoot/build-repo.ps1" "$Folder"
$Step++
}
[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds
"✔️ built $FolderCount Git repositories at 📂$ParentDirName in $Elapsed sec"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of build-repos.ps1 as of 10/19/2023 08:11:35)*

63
docs/cd-autostart.md Normal file
View File

@ -0,0 +1,63 @@
*cd-autostart.ps1*
================
This PowerShell script changes the working directory to the user's autostart folder.
Parameters
----------
```powershell
PS> ./cd-autostart.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-autostart.ps1
📂C:\Users\Markus\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's autostart folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's autostart folder.
.EXAMPLE
PS> ./cd-autostart.ps1
📂C:\Users\Markus\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "$HOME/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup"
if (-not(Test-Path "$Path" -pathType container)) {
throw "Autostart folder at 📂$Path doesn't exist (yet)"
}
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-autostart.ps1 as of 10/19/2023 08:11:35)*

66
docs/cd-crashdumps.md Normal file
View File

@ -0,0 +1,66 @@
*cd-crashdumps.ps1*
================
This PowerShell script changes the working directory to the crash dumps directory (Windows only). Whenever a software crashes and crash dumps are enabled(!) a crash dump file is written. This file helps to identify the reason for the crash.
Parameters
----------
```powershell
PS> ./cd-crashdumps.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-crashdumps
📂C:\Users\Markus\AppData\Local\CrashDumps
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Change to the crash dumps folder
.DESCRIPTION
This PowerShell script changes the working directory to the crash dumps directory (Windows only). Whenever a software crashes and crash dumps are enabled(!) a crash dump file is written. This file helps to identify the reason for the crash.
.EXAMPLE
PS> ./cd-crashdumps
📂C:\Users\Markus\AppData\Local\CrashDumps
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) { throw "Sorry, Windows only" }
[string]$path = Resolve-Path -Path "~"
if (!(Test-Path "$path" -pathType container)) { throw "Home directory at $path doesn't exist (yet)" }
$path += "\AppData\Local\CrashDumps"
if (!(Test-Path "$path" -pathType container)) { throw "Crashdumps directory at $path doesn't exist (yet)" }
Set-Location "$Path"
"📂$path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-crashdumps.ps1 as of 10/19/2023 08:11:35)*

67
docs/cd-desktop.md Normal file
View File

@ -0,0 +1,67 @@
*cd-desktop.ps1*
================
This PowerShell script changes the working directory to the user's desktop folder.
Parameters
----------
```powershell
PS> ./cd-desktop.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-desktop
📂/home/Markus/Desktop
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's desktop folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's desktop folder.
.EXAMPLE
PS> ./cd-desktop
📂/home/Markus/Desktop
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "~/Desktop"
} else {
$Path = [Environment]::GetFolderPath('DesktopDirectory')
}
if (Test-Path "$Path" -pathType container) {
Set-Location "$Path"
"📂$Path"
exit 0 # success
}
throw "User's desktop folder at 📂$Path doesn't exist (yet)"
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-desktop.ps1 as of 10/19/2023 08:11:35)*

67
docs/cd-docs.md Normal file
View File

@ -0,0 +1,67 @@
*cd-docs.ps1*
================
This PowerShell script changes the working directory to the documents folder.
Parameters
----------
```powershell
PS> ./cd-docs.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-docs
📂C:\Users\Markus\Documents
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the documents folder
.DESCRIPTION
This PowerShell script changes the working directory to the documents folder.
.EXAMPLE
PS> ./cd-docs
📂C:\Users\Markus\Documents
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "$HOME/Documents"
} else {
$Path = [Environment]::GetFolderPath('MyDocuments')
}
if (-not(Test-Path "$Path" -pathType container)) {
throw "Documents folder at 📂$Path doesn't exist (yet)"
}
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-docs.ps1 as of 10/19/2023 08:11:35)*

67
docs/cd-downloads.md Normal file
View File

@ -0,0 +1,67 @@
*cd-downloads.ps1*
================
This PowerShell script changes the working directory to the user's downloads folder.
Parameters
----------
```powershell
PS> ./cd-downloads.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-downloads
📂C:\Users\Markus\Downloads
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's downloads folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's downloads folder.
.EXAMPLE
PS> ./cd-downloads
📂C:\Users\Markus\Downloads
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "~/Downloads"
} else {
$Path = (New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
}
if (Test-Path "$Path" -pathType container) {
Set-Location "$Path"
"📂$Path"
exit 0 # success
}
throw "User's downloads folder at 📂$Path doesn't exist (yet)"
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-downloads.ps1 as of 10/19/2023 08:11:35)*

63
docs/cd-dropbox.md Normal file
View File

@ -0,0 +1,63 @@
*cd-dropbox.ps1*
================
This PowerShell script changes the working directory to the user's Dropbox folder.
Parameters
----------
```powershell
PS> ./cd-dropbox.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-dropbox
📂C:\Users\Markus\Dropbox
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's Dropbox folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's Dropbox folder.
.EXAMPLE
PS> ./cd-dropbox
📂C:\Users\Markus\Dropbox
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "$HOME/Dropbox"
if (-not(Test-Path "$Path" -pathType container)) {
throw "Dropbox folder at 📂$Path doesn't exist (yet)"
}
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-dropbox.ps1 as of 10/19/2023 08:11:35)*

67
docs/cd-etc.md Normal file
View File

@ -0,0 +1,67 @@
*cd-etc.ps1*
================
This PowerShell script changes the working directory to the /etc directory.
Parameters
----------
```powershell
PS> ./cd-etc.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-etc
📂C:\Windows\System32\drivers\etc
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Changes to the /etc directory
.DESCRIPTION
This PowerShell script changes the working directory to the /etc directory.
.EXAMPLE
PS> ./cd-etc
📂C:\Windows\System32\drivers\etc
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinx) {
$Path = "/etc"
} else {
$Path = Resolve-Path "$env:WINDIR\System32\drivers\etc"
}
if (-not(Test-Path "$Path" -pathType container)) {
throw "/etc directory at 📂$Path doesn't exist (yet)"
}
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-etc.ps1 as of 10/19/2023 08:11:35)*

63
docs/cd-fonts.md Normal file
View File

@ -0,0 +1,63 @@
*cd-fonts.ps1*
================
This PowerShell script changes the working directory to the fonts folder.
Parameters
----------
```powershell
PS> ./cd-fonts.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-fonts
📂C:\Windows\Fonts
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the fonts folder
.DESCRIPTION
This PowerShell script changes the working directory to the fonts folder.
.EXAMPLE
PS> ./cd-fonts
📂C:\Windows\Fonts
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = [Environment]::GetFolderPath('Fonts')
if (-not(Test-Path "$Path" -pathType container)) {
throw "Fonts folder at 📂$Path doesn't exist (yet)"
}
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-fonts.ps1 as of 10/19/2023 08:11:35)*

63
docs/cd-home.md Normal file
View File

@ -0,0 +1,63 @@
*cd-home.ps1*
================
This PowerShell script changes the working directory to the user's home directory.
Parameters
----------
```powershell
PS> ./cd-home.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-home
📂C:\Users\Markus
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's home folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's home directory.
.EXAMPLE
PS> ./cd-home
📂C:\Users\Markus
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path -Path "~"
if (Test-Path "$Path" -pathType container) {
Set-Location "$Path"
"📂$Path"
exit 0 # success
}
throw "User's home folder at 📂$Path doesn't exist (yet)"
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-home.ps1 as of 10/19/2023 08:11:35)*

51
docs/cd-logs.md Normal file
View File

@ -0,0 +1,51 @@
*cd-logs.ps1*
================
cd-logs.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the logs folder
.DESCRIPTION
This PowerShell script changes the current working directory to the logs directory.
.EXAMPLE
PS> ./cd-logs
📂/var/logs
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetLogsDir {
if ($IsLinux) { return "/var/logs" }
$WinDir = [System.Environment]::GetFolderPath('Windows')
return "$WinDir\Logs"
}
try {
$Path = GetLogsDir
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-logs.ps1 as of 10/19/2023 08:11:35)*

67
docs/cd-music.md Normal file
View File

@ -0,0 +1,67 @@
*cd-music.ps1*
================
This PowerShell script changes the working directory to the user's music folder.
Parameters
----------
```powershell
PS> ./cd-music.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-music
📂C:\Users\Markus\Music
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's music folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's music folder.
.EXAMPLE
PS> ./cd-music
📂C:\Users\Markus\Music
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "~/Music"
} else {
$Path = [Environment]::GetFolderPath('MyMusic')
}
if (Test-Path "$Path" -pathType container) {
Set-Location "$Path"
"📂$Path"
exit 0 # success
}
throw "User's music folder at 📂$Path doesn't exist (yet)"
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-music.ps1 as of 10/19/2023 08:11:35)*

63
docs/cd-onedrive.md Normal file
View File

@ -0,0 +1,63 @@
*cd-onedrive.ps1*
================
This PowerShell script changes the working directory to the user's OneDrive folder.
Parameters
----------
```powershell
PS> ./cd-onedrive.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-onedrive
📂C:\Users\Markus\OneDrive
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's OneDrive folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's OneDrive folder.
.EXAMPLE
PS> ./cd-onedrive
📂C:\Users\Markus\OneDrive
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "$HOME/OneDrive"
if (-not(Test-Path "$Path" -pathType container)) {
throw "OneDrive folder at 📂$Path doesn't exist (yet)"
}
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-onedrive.ps1 as of 10/19/2023 08:11:35)*

65
docs/cd-pics.md Normal file
View File

@ -0,0 +1,65 @@
*cd-pics.ps1*
================
This PowerShell script changes the working directory to the user's pictures folder.
Parameters
----------
```powershell
PS> ./cd-pics.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-pics
📂C:\Users\Markus\Pictures
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's pictures folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's pictures folder.
.EXAMPLE
PS> ./cd-pics
📂C:\Users\Markus\Pictures
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "$HOME/Pictures"
} else {
$Path = [Environment]::GetFolderPath('MyPictures')
}
if (-not(Test-Path "$Path" -pathType container)) { throw "Pictures folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-pics.ps1 as of 10/19/2023 08:11:35)*

65
docs/cd-public.md Normal file
View File

@ -0,0 +1,65 @@
*cd-public.ps1*
================
This PowerShell script changes the working directory to the Public folder.
Parameters
----------
```powershell
PS> ./cd-public.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-public
📂C:\Users\Public
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the Public folder
.DESCRIPTION
This PowerShell script changes the working directory to the Public folder.
.EXAMPLE
PS> ./cd-public
📂C:\Users\Public
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "~/Public"
} else {
$Path = Resolve-Path "~/../Public"
}
if (-not(Test-Path "$Path" -pathType container)) { throw "Public folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-public.ps1 as of 10/19/2023 08:11:35)*

56
docs/cd-recycle-bin.md Normal file
View File

@ -0,0 +1,56 @@
*cd-recycle-bin.ps1*
================
cd-recycle-bin.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's recycle bin folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's recycle bin folder.
.EXAMPLE
PS> ./cd-recycle-bin
📂C:\$Recycle.Bin\S-1-5-21-123404-23309-294260-1001
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetCurrentUserSID { [CmdletBinding()] param()
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
return ([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).SID.Value
}
try {
if ($IsLinux) {
$Path = "$HOME/.local/share/Trash/"
} else {
$Path = "C:\$Recycle.Bin\" + "$(GetCurrentUserSID)"
}
if (-not(Test-Path "$Path" -pathType container)) { throw "Recycle bin folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-recycle-bin.ps1 as of 10/19/2023 08:11:35)*

83
docs/cd-repos.md Normal file
View File

@ -0,0 +1,83 @@
*cd-repos.ps1*
================
This PowerShell script changes the working directory to the user's Git repositories folder.
Parameters
----------
```powershell
PS> ./cd-repos.ps1 [[-Subpath] <String>] [<CommonParameters>]
-Subpath <String>
Specifies an additional relative subpath (optional)
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-repos
📂C:\Users\Markus\source\Repos
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's repos folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's Git repositories folder.
.PARAMETER Subpath
Specifies an additional relative subpath (optional)
.EXAMPLE
PS> ./cd-repos
📂C:\Users\Markus\source\Repos
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Subpath = "")
try {
if (Test-Path "$HOME/Repos" -pathType Container) { # try short name
$Path = "$HOME/Repos/$Subpath"
} elseif (Test-Path "$HOME/Repositories" -pathType Container) { # try long name
$Path = "$HOME/Repositories/$Subpath"
} elseif (Test-Path "$HOME/source/repos" -pathType Container) { # try Visual Studio default
$Path = "$HOME/source/repos/$Subpath"
} else {
throw "The folder for Git repositories in your home directory doesn't exist (yet)."
}
if (-not(Test-Path "$Path" -pathType Container)) { throw "The path to 📂$Path doesn't exist (yet)." }
$Path = Resolve-Path "$Path"
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error: $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-repos.ps1 as of 10/19/2023 08:11:35)*

60
docs/cd-root.md Normal file
View File

@ -0,0 +1,60 @@
*cd-root.ps1*
================
This PowerShell script changes the current working directory to the root directory (C:\ on Windows).
Parameters
----------
```powershell
PS> ./cd-root.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-root
📂C:\
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the root directory
.DESCRIPTION
This PowerShell script changes the current working directory to the root directory (C:\ on Windows).
.EXAMPLE
PS> ./cd-root
📂C:\
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) { $Path = "/" } else { $Path = "C:\" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-root.ps1 as of 10/19/2023 08:11:35)*

58
docs/cd-screenshots.md Normal file
View File

@ -0,0 +1,58 @@
*cd-screenshots.ps1*
================
cd-screenshots.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's screenshots folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's screenshots folder.
.EXAMPLE
PS> ./cd-screenshots
📂C:\Users\Markus\Pictures\Screenshots
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetScreenshotsFolder {
if ($IsLinux) {
$Path = "$HOME/Pictures"
if (-not(Test-Path "$Path" -pathType container)) { throw "Pictures folder at $Path doesn't exist (yet)" }
if (Test-Path "$Path/Screenshots" -pathType container) { $Path = "$Path/Screenshots" }
} else {
$Path = [Environment]::GetFolderPath('MyPictures')
if (-not(Test-Path "$Path" -pathType container)) { throw "Pictures folder at $Path doesn't exist (yet)" }
if (Test-Path "$Path\Screenshots" -pathType container) { $Path = "$Path\Screenshots" }
}
return $Path
}
try {
$Path = GetScreenshotsFolder
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-screenshots.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-scripts.md Normal file
View File

@ -0,0 +1,61 @@
*cd-scripts.ps1*
================
This PowerShell script changes the working directory to the PowerShell scripts folder.
Parameters
----------
```powershell
PS> ./cd-scripts.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-scripts
📂C:\Users\Markus\source\repos\PowerShell\Scripts
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the PowerShell scripts folder
.DESCRIPTION
This PowerShell script changes the working directory to the PowerShell scripts folder.
.EXAMPLE
PS> ./cd-scripts
📂C:\Users\Markus\source\repos\PowerShell\Scripts
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "$PSScriptRoot"
if (-not(Test-Path "$Path" -pathType container)) { throw "PowerShell scripts folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-scripts.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-ssh.md Normal file
View File

@ -0,0 +1,61 @@
*cd-ssh.ps1*
================
This PowerShell script changes the working directory to the user's SSH folder.
Parameters
----------
```powershell
PS> ./cd-ssh.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-ssh
📂C:\Users\Markus\.ssh
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's SSH folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's SSH folder.
.EXAMPLE
PS> ./cd-ssh
📂C:\Users\Markus\.ssh
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "~/.ssh"
if (-not(Test-Path "$Path" -pathType container)) { throw "User's SSH folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-ssh.ps1 as of 10/19/2023 08:11:35)*

53
docs/cd-temp.md Normal file
View File

@ -0,0 +1,53 @@
*cd-temp.ps1*
================
cd-temp.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the temporary folder
.DESCRIPTION
This PowerShell script changes the working directory to the temporary folder.
.EXAMPLE
PS> ./cd-temp
📂C:\Users\Markus\AppData\Local\Temp
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetTempDir {
if ("$env:TEMP" -ne "") { return "$env:TEMP" }
if ("$env:TMP" -ne "") { return "$env:TMP" }
if ($IsLinux) { return "/tmp" }
return "C:\Temp"
}
try {
$Path = GetTempDir
if (-not(Test-Path "$Path" -pathType container)) { throw "Temporary folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-temp.ps1 as of 10/19/2023 08:11:35)*

65
docs/cd-templates.md Normal file
View File

@ -0,0 +1,65 @@
*cd-templates.ps1*
================
This PowerShell script changes the working directory to the templates folder.
Parameters
----------
```powershell
PS> ./cd-templates.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-templates
📂/home/Markus/Templates
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the templates folder
.DESCRIPTION
This PowerShell script changes the working directory to the templates folder.
.EXAMPLE
PS> ./cd-templates
📂/home/Markus/Templates
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "~/Templates"
} else {
$Path = [Environment]::GetFolderPath('Templates')
}
if (-not(Test-Path "$Path" -pathType container)) { throw "Templates folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-templates.ps1 as of 10/19/2023 08:11:35)*

56
docs/cd-trash.md Normal file
View File

@ -0,0 +1,56 @@
*cd-trash.ps1*
================
cd-trash.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's trash folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's trash folder.
.EXAMPLE
PS> ./cd-trash
📂C:\$Recycle.Bin\S-1-5-21-123404-23309-294260-1001
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetCurrentUserSID { [CmdletBinding()] param()
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
return ([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).SID.Value
}
try {
if ($IsLinux) {
$Path = "$HOME/.local/share/Trash/"
} else {
$Path = "C:\$Recycle.Bin\" + "$(GetCurrentUserSID)"
}
if (-not(Test-Path "$Path" -pathType container)) { throw "Trash folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-trash.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-up.md Normal file
View File

@ -0,0 +1,61 @@
*cd-up.ps1*
================
This PowerShell script changes the working directory to one directory level up.
Parameters
----------
```powershell
PS> ./cd-up.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> .\cd-up
📂C:\Users
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to one level up
.DESCRIPTION
This PowerShell script changes the working directory to one directory level up.
.EXAMPLE
PS> .\cd-up
📂C:\Users
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path ".."
if (-not(Test-Path "$Path" -pathType container)) { throw "Folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-up.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-up2.md Normal file
View File

@ -0,0 +1,61 @@
*cd-up2.ps1*
================
This PowerShell script changes the working directory to two directory level up.
Parameters
----------
```powershell
PS> ./cd-up2.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-up2
📂C:\
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to two directory levels up
.DESCRIPTION
This PowerShell script changes the working directory to two directory level up.
.EXAMPLE
PS> ./cd-up2
📂C:\
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "../.."
if (-not(Test-Path "$Path" -pathType container)) { throw "Folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-up2.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-up3.md Normal file
View File

@ -0,0 +1,61 @@
*cd-up3.ps1*
================
This PowerShell script changes the working directory to three directory levels up.
Parameters
----------
```powershell
PS> ./cd-up3.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-up3
📂C:\
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to three directory levels up
.DESCRIPTION
This PowerShell script changes the working directory to three directory levels up.
.EXAMPLE
PS> ./cd-up3
📂C:\
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "../../.."
if (-not(Test-Path "$Path" -pathType container)) { throw "Folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-up3.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-up4.md Normal file
View File

@ -0,0 +1,61 @@
*cd-up4.ps1*
================
This PowerShell script changes the working directory to four directory levels up.
Parameters
----------
```powershell
PS> ./cd-up4.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-up4
📂C:\
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to four directory levels up
.DESCRIPTION
This PowerShell script changes the working directory to four directory levels up.
.EXAMPLE
PS> ./cd-up4
📂C:\
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "../../../.."
if (-not(Test-Path "$Path" -pathType container)) { throw "Folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-up4.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-users.md Normal file
View File

@ -0,0 +1,61 @@
*cd-users.ps1*
================
This PowerShell script changes the working directory to the users directory.
Parameters
----------
```powershell
PS> ./cd-users.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-users
📂C:\Users
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the users directory
.DESCRIPTION
This PowerShell script changes the working directory to the users directory.
.EXAMPLE
PS> ./cd-users
📂C:\Users
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "$HOME/.."
if (-not(Test-Path "$Path" -pathType container)) { throw "Users directory at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-users.ps1 as of 10/19/2023 08:11:35)*

65
docs/cd-videos.md Normal file
View File

@ -0,0 +1,65 @@
*cd-videos.ps1*
================
This PowerShell script changes the working directory to the user's videos folder.
Parameters
----------
```powershell
PS> ./cd-videos.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-videos
📂C:\Users\Markus\Videos
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the user's videos folder
.DESCRIPTION
This PowerShell script changes the working directory to the user's videos folder.
.EXAMPLE
PS> ./cd-videos
📂C:\Users\Markus\Videos
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Path = Resolve-Path "$HOME/Videos"
} else {
$Path = [Environment]::GetFolderPath('MyVideos')
}
if (-not(Test-Path "$Path" -pathType container)) { throw "Videos folder at 📂$Path doesn't exist (yet)" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-videos.ps1 as of 10/19/2023 08:11:35)*

61
docs/cd-windows.md Normal file
View File

@ -0,0 +1,61 @@
*cd-windows.ps1*
================
This PowerShell script changes the working directory to the Windows directory.
Parameters
----------
```powershell
PS> ./cd-windows.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./cd-windows
📂C:\Windows
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Sets the working directory to the Windows directory
.DESCRIPTION
This PowerShell script changes the working directory to the Windows directory.
.EXAMPLE
PS> ./cd-windows
📂C:\Windows
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Path = Resolve-Path "$env:WINDIR"
if (-not(Test-Path "$Path" -pathType container)) { throw "Windows directory at 📂$Path doesn't exist" }
Set-Location "$Path"
"📂$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of cd-windows.ps1 as of 10/19/2023 08:11:35)*

82
docs/change-wallpaper.md Normal file
View File

@ -0,0 +1,82 @@
*change-wallpaper.ps1*
================
This PowerShell script downloads a random photo from Unsplash and sets it as desktop background.
Parameters
----------
```powershell
PS> ./change-wallpaper.ps1 [[-Category] <String>] [<CommonParameters>]
-Category <String>
Specifies the photo category (beach, city, ...)
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./change-wallpaper
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Changes the wallpaper
.DESCRIPTION
This PowerShell script downloads a random photo from Unsplash and sets it as desktop background.
.PARAMETER Category
Specifies the photo category (beach, city, ...)
.EXAMPLE
PS> ./change-wallpaper
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Category = "")
function GetTempDir {
if ("$env:TEMP" -ne "") { return "$env:TEMP" }
if ("$env:TMP" -ne "") { return "$env:TMP" }
if ($IsLinux) { return "/tmp" }
return "C:\Temp"
}
try {
& "$PSScriptRoot/speak-english.ps1" "Just a second..."
$Path = "$(GetTempDir)/next_wallpaper.jpg"
& wget -O $Path "https://source.unsplash.com/3840x2160?$Category"
if ($lastExitCode -ne "0") { throw "Download failed" }
& "$PSScriptRoot/set-wallpaper.ps1" -ImageFile "$Path"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of change-wallpaper.ps1 as of 10/19/2023 08:11:35)*

328
docs/cheat-sheet.md Normal file
View File

@ -0,0 +1,328 @@
![](powershell_black_icon_64x64.png) PowerShell Cheat Sheet
===========================================================
Basic Commands
--------------
```
Cmdlet : Commands built into shell written in .NET
Functions : Commands written in PowerShell language
Parameter : Argument to a Cmdlet/Function/Script
Alias : Shortcut for a Cmdlet or Function
Scripts : Text files with .ps1 extension
Applications : Existing windows programs
Pipelines : Pass objects Get-process word | Stop-Process
Ctrl+c : Interrupt current command
Left/right : Navigate editing cursor
Ctrl+left/right : Navigate a word at a time
Home / End : End Move to start / end of line
Up / down : Move up and down through history
Insert : Toggles between insert/overwrite mode
F7 : Command history in a window
Tab / Shift-Tab : Command line completion
```
Commands to get Help
--------------------
```
Get-Command # Retrieves a list of all the commands available to PowerShell
# (native binaries in $env:PATH + cmdlets / functions from PowerShell modules)
Get-Command -Module Microsoft* # Retrieves a list of all the PowerShell commands exported from modules named Microsoft*
Get-Command -Name *item # Retrieves a list of all commands (native binaries + PowerShell commands) ending in "item"
Get-Help # Get all help topics
Get-Help -Name about_Variables # Get help for a specific about_* topic (aka. man page)
Get-Help -Name Get-Command # Get help for a specific PowerShell function
Get-Help -Name Get-Command -Parameter Module # Get help for a specific parameter on a specific command
```
Variables
---------
```
$a = 0 # Initialize a variable
[int]$a = 'Paris' # Initialize a variable, with the specified type (throws an exception)
[string]$a = 'Paris' # Initialize a variable, with the specified type (doesn't throw an exception)
$a,$b = 0 or $a,$b = 'a','b' # Assign multiple variables
$a,$b = $b,$a # Flip variables
$var=[int]5 # Strongly typed variable
Get-Command -Name *varia* # Get a list of commands related to variable management
Get-Variable # Get an array of objects, representing the variables in the current and parent scopes
Get-Variable | ? { $PSItem.Options -contains 'constant' } # Get variables with the "Constant" option set
Get-Variable | ? { $PSItem.Options -contains 'readonly' } # Get variables with the "ReadOnly" option set
New-Variable -Name FirstName -Value Trevor
New-Variable FirstName -Value Trevor -Option Constant # Create a constant variable, that can only be removed by restarting PowerShell
New-Variable FirstName -Value Trevor -Option ReadOnly # Create a variable that can only be removed by specifying the -Force parameter on Remove-Variable
Remove-Variable -Name firstname # Remove a variable, with the specified name
Remove-Variable -Name firstname -Force # Remove a variable, with the specified name, that has the "ReadOnly" option set
```
Operators
---------
```
$a = 2 # Basic variable assignment operator
$a += 1 # Incremental assignment operator
$a -= 1 # Decrement assignment operator
$a -eq 0 # Equality comparison operator
$a -ne 5 # Not-equal comparison operator
$a -gt 2 # Greater than comparison operator
$a -lt 3 # Less than comparison operator
$FirstName = 'Trevor'
$FirstName -like 'T*' # Perform string comparison using the -like operator, which supports the wildcard (*) character. Returns $true
$BaconIsYummy = $true
$FoodToEat = $BaconIsYummy ? 'bacon' : 'beets' # Sets the $FoodToEat variable to 'bacon' using the ternary operator
'Celery' -in @('Bacon', 'Sausage', 'Steak', 'Chicken') # Returns boolean value indicating if left-hand operand exists in right-hand array
'Celery' -notin @('Bacon', 'Sausage', 'Steak') # Returns $true, because Celery is not part of the right-hand list
5 -is [string] # Is the number 5 a string value? No. Returns $false.
5 -is [int32] # Is the number 5 a 32-bit integer? Yes. Returns $true.
5 -is [int64] # Is the number 5 a 64-bit integer? No. Returns $false.
'Trevor' -is [int64] # Is 'Trevor' a 64-bit integer? No. Returns $false.
'Trevor' -isnot [string] # Is 'Trevor' NOT a string? No. Returns $false.
'Trevor' -is [string] # Is 'Trevor' a string? Yes. Returns $true.
$true -is [bool] # Is $true a boolean value? Yes. Returns $true.
$false -is [bool] # Is $false a boolean value? Yes. Returns $true.
5 -is [bool] # Is the number 5 a boolean value? No. Returns $false.
```
Flow Control
------------
```
if (1 -eq 1) { } # Do something if 1 is equal to 1
do { 'hi' } while ($false) # Loop while a condition is true (always executes at least once)
while ($false) { 'hi' } # While loops are not guaranteed to run at least once
while ($true) { } # Do something indefinitely
while ($true) { if (1 -eq 1) { break } } # Break out of an infinite while loop conditionally
for ($i = 0; $i -le 10; $i++) { Write-Host $i } # Iterate using a for..loop
foreach ($item in (Get-Process)) { } # Iterate over items in an array
switch ('test') { 'test' { 'matched'; break } } # Use the switch statement to perform actions based on conditions. Returns string 'matched'
switch -regex (@('Trevor', 'Daniel', 'Bobby')) { # Use the switch statement with regular expressions to match inputs
'o' { $PSItem; break } # NOTE: $PSItem or $_ refers to the "current" item being matched in the array
}
switch -regex (@('Trevor', 'Daniel', 'Bobby')) { # Switch statement omitting the break statement. Inputs can be matched multiple times, in this scenario.
'e' { $PSItem }
'r' { $PSItem }
}
```
Functions
---------
```
function add ($a, $b) { $a + $b } # A basic PowerShell function
function Do-Something { # A PowerShell Advanced Function, with all three blocks declared: BEGIN, PROCESS, END
[CmdletBinding]()]
param ()
begin { }
process { }
end { }
}
```
Regular Expressions
-------------------
```
'Trevor' -match '^T\w*' # Perform a regular expression match against a string value. # Returns $true and populates $matches variable
$matches[0] # Returns 'Trevor', based on the above match
@('Joe', 'Billy', 'Bobby') -match '^B' # Perform a regular expression match against an array of string values. Returns Billy, Bobby
$regex = [regex]'(\w{3,8})'
$regex.Matches('Bobby Dillon Joe Jacob').Value # Find multiple matches against a singleton string value.
```
Working with Modules
--------------------
```
Get-Command -Name *module* -Module mic*core # Which commands can I use to work with modules?
Get-Module -ListAvailable # Show me all of the modules installed on my system (controlled by $env:PSModulePath)
Get-Module # Show me all of the modules imported into the current session
$PSModuleAutoLoadingPreference = 0 # Disable auto-loading of installed PowerShell modules, when a command is invoked
Import-Module -Name NameIT # Explicitly import a module, from the specified filesystem path or name (must be present in $env:PSModulePath)
Remove-Module -Name NameIT # Remove a module from the scope of the current PowerShell session
New-ModuleManifest # Helper function to create a new module manifest. You can create it by hand instead.
New-Module -Name trevor -ScriptBlock { # Create an in-memory PowerShell module (advanced users)
function Add($a,$b) { $a + $b } }
New-Module -Name trevor -ScriptBlock { # Create an in-memory PowerShell module, and make it visible to Get-Module (advanced users)
function Add($a,$b) { $a + $b } } | Import-Module
```
Module Management
-----------------
```
Get-Command -Module PowerShellGet # Explore commands to manage PowerShell modules
Find-Module -Tag cloud # Find modules in the PowerShell Gallery with a "cloud" tag
Find-Module -Name ps* # Find modules in the PowerShell Gallery whose name starts with "PS"
Install-Module -Name NameIT -Scope CurrentUser -Force # Install a module to your personal directory (non-admin)
Install-Module -Name NameIT -Force # Install a module to your personal directory (admin / root)
Install-Module -Name NameIT -RequiredVersion 1.9.0 # Install a specific version of a module
Uninstall-Module -Name NameIT # Uninstall module called "NameIT", only if it was installed via Install-Module
Register-PSRepository -Name <repo> -SourceLocation <uri> # Configure a private PowerShell module registry
Unregister-PSRepository -Name <repo> # Deregister a PowerShell Repository
```
Filesystem
----------
```
New-Item -Path c:\test -ItemType Directory # Create a directory
mkdir c:\test2 # Create a directory (short-hand)
New-Item -Path c:\test\myrecipes.txt # Create an empty file
Set-Content -Path c:\test.txt -Value '' # Create an empty file
[System.IO.File]::WriteAllText('testing.txt', '') # Create an empty file using .NET Base Class Library
Remove-Item -Path testing.txt # Delete a file
[System.IO.File]::Delete('testing.txt') # Delete a file using .NET Base Class Library
```
Hashtables (Dictionary)
-----------------------
```
$Person = @{
FirstName = 'Joe'
LastName = 'Doe'
Likes = @(
'Bacon',
'Beer'
)
} # Create a PowerShell HashTable
$Person.FirstName # Retrieve an item from a HashTable
$Person.Likes[-1] # Returns the last item in the "Likes" array, in the $Person HashTable (software)
$Person.Age = 50 # Add a new property to a HashTable
```
Windows Management Instrumentation (WMI) (Windows only)
-------------------------------------------------------
```
Get-CimInstance -ClassName Win32_BIOS # Retrieve BIOS information
Get-CimInstance -ClassName Win32_DiskDrive # Retrieve information about locally connected physical disk devices
Get-CimInstance -ClassName Win32_PhysicalMemory # Retrieve information about install physical memory (RAM)
Get-CimInstance -ClassName Win32_NetworkAdapter # Retrieve information about installed network adapters (physical + virtual)
Get-CimInstance -ClassName Win32_VideoController # Retrieve information about installed graphics / video card (GPU)
Get-CimClass -Namespace root\cimv2 # Explore the various WMI classes available in the root\cimv2 namespace
Get-CimInstance -Namespace root -ClassName __NAMESPACE # Explore the child WMI namespaces underneath the root\cimv2 namespace
```
Asynchronous Event Registration
-------------------------------
```
#### Register for filesystem events
$Watcher = [System.IO.FileSystemWatcher]::new('c:\tmp')
Register-ObjectEvent -InputObject $Watcher -EventName Created -Action {
Write-Host -Object 'New file created!!!'
}
#### Perform a task on a timer (ie. every 5000 milliseconds)
$Timer = [System.Timers.Timer]::new(5000)
Register-ObjectEvent -InputObject $Timer -EventName Elapsed -Action {
Write-Host -ForegroundColor Blue -Object 'Timer elapsed! Doing some work.'
}
$Timer.Start()
```
PowerShell Drives (PSDrives)
----------------------------
```
Get-PSDrive # List all the PSDrives on the system
New-PSDrive -Name videos -PSProvider Filesystem -Root x:\data\content\videos # Create a new PSDrive that points to a filesystem location
New-PSDrive -Name h -PSProvider FileSystem -Root '\\storage\h$\data' -Persist # Create a persistent mount on a drive letter, visible in Windows Explorer
Set-Location -Path videos: # Switch into PSDrive context
Remove-PSDrive -Name xyz # Delete a PSDrive
```
Data Management
---------------
```
Get-Process | Group-Object -Property Name # Group objects by property name
Get-Process | Sort-Object -Property Id # Sort objects by a given property name
Get-Process | Where-Object -FilterScript { $PSItem.Name -match '^c' } # Filter objects based on a property matching a value
gps | where Name -match '^c' # Abbreviated form of the previous statement
```
PowerShell Classes
------------------
```
class Person {
[string] $FirstName # Define a class property as a string
[string] $LastName = 'Doe' # Define a class property with a default value
[int] $Age # Define a class property as an integer
Person() { # Add a default constructor (no input parameters) for a class
}
Person([string] $FirstName) { # Define a class constructor with a single string parameter
$this.FirstName = $FirstName
}
[string] FullName() {
return '{0} {1}' -f $this.FirstName, $this.LastName
}
}
$Person01 = [Person]::new() # Instantiate a new Person object.
$Person01.FirstName = 'Joe' # Set the FirstName property on the Person object.
$Person01.FullName() # Call the FullName() method on the Person object. Returns 'Trevor Sullivan'
class Server { # Define a "Server" class, to manage remote servers. Customize this based on your needs.
[string] $Name
[System.Net.IPAddress] $IPAddress # Define a class property as an IPaddress object
[string] $SSHKey = "$HOME/.ssh/id_rsa" # Set the path to the private key used to authenticate to the server
[string] $Username # Set the username to login to the remote server with
RunCommand([string] $Command) { # Define a method to call a command on the remote server, via SSH
ssh -i $this.SSHKey $this.Username@$this.Name $this.Command
}
}
$Server01 = [Server]::new() # Instantiate the Server class as a new object
$Server01.Name = 'webserver01.local' # Set the "name" of the remote server
$Server01.Username = 'root' # Set the username property of the "Server" object
$Server01.RunCommand("hostname") # Run a command on the remote server
```
REST APIs
---------
```
$Params = @{
Uri = 'https://api.github.com/events'
Method = 'Get'
}
Invoke-RestMethod @Params # Call a REST API, using the HTTP GET method
```

70
docs/check-admin.md Normal file
View File

@ -0,0 +1,70 @@
*check-admin.ps1*
================
This PowerShell script checks if the user has administrator rights.
Parameters
----------
```powershell
PS> ./check-admin.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-admin.ps1
Yes
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Check for admin rights
.DESCRIPTION
This PowerShell script checks if the user has administrator rights.
.EXAMPLE
PS> ./check-admin.ps1
✅ Yes
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
# todo
} else {
$user = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = (New-Object Security.Principal.WindowsPrincipal $user)
if ($principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
"✅ Yes"
} elseif ($principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Guest)) {
"⚠️ No, guest rights only"
} else {
"⚠️ No, normal user rights only"
}
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-admin.ps1 as of 10/19/2023 08:11:35)*

78
docs/check-apps.md Normal file
View File

@ -0,0 +1,78 @@
*check-apps.ps1*
================
This PowerShell script queries the installed applications and prints it.
Parameters
----------
```powershell
PS> ./check-apps.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-apps.ps1
119 Windows apps installed, 11 upgrades available
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Query the app status
.DESCRIPTION
This PowerShell script queries the installed applications and prints it.
.EXAMPLE
PS> ./check-apps.ps1
✅ 119 Windows apps installed, 11 upgrades available
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
Write-Progress "⏳ Querying installed applications..."
$numPkgs = (apt list --installed 2>/dev/null).Count
$numSnaps = (snap list).Count - 1
Write-Progress -Completed "."
Write-Host "✅ $numPkgs Debian packages, $numSnaps snaps installed"
} else {
Write-Progress "⏳ Querying installed applications..."
$Apps = Get-AppxPackage
Write-Progress -Completed "."
Write-Host "✅ $($Apps.Count) Windows apps installed, " -noNewline
[int]$NumNonOk = 0
foreach($App in $Apps) { if ($App.Status -ne "Ok") { $NumNonOk++ } }
if ($NumNonOk -gt 0) { $Status += ", $NumNonOk non-ok" }
[int]$NumErrors = (Get-AppxLastError)
if ($NumErrors -gt 0) { $Status += ", $NumErrors errors" }
$NumUpdates = (winget upgrade --include-unknown).Count - 5
Write-Host "$NumUpdates upgrades available"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-apps.ps1 as of 10/19/2023 08:11:35)*

89
docs/check-battery.md Normal file
View File

@ -0,0 +1,89 @@
*check-battery.ps1*
================
This PowerShell script queries the status of the system battery and prints it.
Parameters
----------
```powershell
PS> ./check-battery.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-battery.ps1
Battery 9% low, 54 min remaining
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the battery
.DESCRIPTION
This PowerShell script queries the status of the system battery and prints it.
.EXAMPLE
PS> ./check-battery.ps1
⚠️ Battery 9% low, 54 min remaining
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Reply = "✅ AC powered" # TODO, just guessing :-)
} else {
Add-Type -Assembly System.Windows.Forms
$Details = [System.Windows.Forms.SystemInformation]::PowerStatus
[int]$Percent = 100 * $Details.BatteryLifePercent
[int]$Remaining = $Details.BatteryLifeRemaining / 60
if ($Details.PowerLineStatus -eq "Online") {
if ($Details.BatteryChargeStatus -eq "NoSystemBattery") {
$Reply = "✅ AC powered"
} elseif ($Percent -ge 95) {
$Reply = "✅ Battery fully charged ($Percent%)"
} else {
$Reply = "✅ Battery charging... ($Percent%)"
}
} else { # must be offline
if ($Remaining -eq 0) {
$Reply = "✅ Battery at $Percent%, calculating remaining time..."
} elseif ($Remaining -le 5) {
$Reply = "⚠️ Battery at $Percent%, ONLY $Remaining MIN remaining"
} elseif ($Remaining -le 30) {
$Reply = "⚠️ Battery at $Percent%, only $Remaining min remaining"
} elseif ($Percent -lt 10) {
$Reply = "⚠️ Battery $Percent% low, $Remaining min remaining"
} elseif ($Percent -ge 80) {
$Reply = "✅ Battery $Percent% full, $Remaining min remaining"
} else {
$Reply = "✅ Battery at $Percent%, $Remaining min remaining"
}
}
}
Write-Output $Reply
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-battery.ps1 as of 08/06/2023 21:36:05)*

79
docs/check-bios.md Normal file
View File

@ -0,0 +1,79 @@
*check-bios.ps1*
================
This PowerShell script queries the BIOS status and prints it.
Parameters
----------
```powershell
PS> ./check-bios.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-bios.ps1
BIOS model P62 v02.67 by HP (version HPQOEM - 5, S/N CZC1080B01)
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the BIOS status
.DESCRIPTION
This PowerShell script queries the BIOS status and prints it.
.EXAMPLE
PS> ./check-bios.ps1
✅ BIOS model P62 v02.67 by HP (version HPQOEM - 5, S/N CZC1080B01)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
Write-Progress "⏳ Querying BIOS details..."
$model = (sudo dmidecode -s system-product-name)
if ("$model" -ne "") {
$version = (sudo dmidecode -s bios-version)
$releaseDate = (sudo dmidecode -s bios-release-date)
$manufacturer = (sudo dmidecode -s system-manufacturer)
Write-Host "✅ BIOS model $model by $manufacturer (version $version of $releaseDate)"
}
Write-Progress -completed "."
} else {
$BIOS = Get-CimInstance -ClassName Win32_BIOS
$model = $BIOS.Name.Trim()
$version = $BIOS.Version.Trim()
$serialNumber = $BIOS.SerialNumber.Trim()
$manufacturer = $BIOS.Manufacturer.Trim()
if ($serialNumber -eq "To be filled by O.E.M.") {
Write-Host "✅ BIOS model $model by $manufacturer (version $version)"
} else {
Write-Host "✅ BIOS model $model by $manufacturer (version $version, S/N $serialNumber)"
}
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-bios.ps1 as of 10/19/2023 08:11:35)*

View File

@ -0,0 +1,26 @@
## check-bitcoin-rate.ps1 - Checks the Bitcoin rate
This script queries the current Bitcoin exchange rates and answers by text-to-speech (TTS).
## Parameters
```powershell
check-bitcoin-rate.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-bitcoin-rate
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-bitcoin-rate.ps1*

27
docs/check-cpu-temp.md Normal file
View File

@ -0,0 +1,27 @@
## check-cpu-temp.ps1 - Checks the CPU temperature
This script checks the CPU temperature.
## Parameters
```powershell
/home/markus/Repos/PowerShell/Scripts/check-cpu-temp.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-cpu-temp
CPU has 30.3 °C: good
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-cpu-temp.ps1*

106
docs/check-cpu.md Normal file
View File

@ -0,0 +1,106 @@
*check-cpu.ps1*
================
check-cpu.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the CPU status
.DESCRIPTION
This PowerShell script queries the CPU status (name, type, speed, temperature, etc) and prints it.
.EXAMPLE
PS> ./check-cpu.ps1
✅ Intel(R) Core(TM) i9-10900X CPU @ 3.70GHz (AMD64, 20 cores, CPU0, 3696MHz, CPU0 socket, 31.3°C)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetProcessorTemperature {
$temp = 99999.9 # unsupported
if ($IsLinux) {
if (Test-Path "/sys/class/thermal/thermal_zone0/temp" -pathType leaf) {
[int]$IntTemp = Get-Content "/sys/class/thermal/thermal_zone0/temp"
$temp = [math]::round($IntTemp / 1000.0, 1)
}
} else {
$objects = Get-WmiObject -Query "SELECT * FROM Win32_PerfFormattedData_Counters_ThermalZoneInformation" -Namespace "root/CIMV2"
foreach ($object in $objects) {
$highPrec = $object.HighPrecisionTemperature
$temp = [math]::round($highPrec / 100.0, 1)
}
}
return $temp
}
function GetProcessorArchitecture {
if ("$env:PROCESSOR_ARCHITECTURE" -ne "") { return "$env:PROCESSOR_ARCHITECTURE" }
if ($IsLinux) {
$Name = $PSVersionTable.OS
if ($Name -like "*-generic *") {
if ([System.Environment]::Is64BitOperatingSystem) { return "x64" } else { return "x86" }
} elseif ($Name -like "*-raspi *") {
if ([System.Environment]::Is64BitOperatingSystem) { return "ARM64" } else { return "ARM32" }
} else {
return ""
}
}
}
try {
Write-Progress "⏳ Querying CPU status... "
$status = "✅"
$celsius = GetProcessorTemperature
if ($celsius -eq 99999.9) {
$temp = "no temp"
} elseif ($celsius -gt 50) {
$temp = "$($celsius)°C"
$status = "⚠️"
} elseif ($celsius -lt 0) {
$temp = "$($celsius)°C"
$status = "⚠️"
} else {
$temp = "$($celsius)°C"
}
$arch = GetProcessorArchitecture
if ($IsLinux) {
$cpuName = "$arch CPU"
$arch = ""
$deviceID = ""
$speed = ""
$socket = ""
} else {
$details = Get-WmiObject -Class Win32_Processor
$cpuName = $details.Name.trim()
$arch = "$arch, "
$deviceID = "$($details.DeviceID), "
$speed = "$($details.MaxClockSpeed)MHz, "
$socket = "$($details.SocketDesignation) socket, "
}
$cores = [System.Environment]::ProcessorCount
Write-Progress -completed " "
Write-Host "$status $cpuName ($($arch)$cores cores, $($deviceID)$($speed)$($socket)$temp)"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-cpu.ps1 as of 10/19/2023 08:11:35)*

27
docs/check-date.md Normal file
View File

@ -0,0 +1,27 @@
## check-date.ps1 - Determines the current date
This PowerShell script determines and speaks the current date by text-to-speech (TTS).
## Parameters
```powershell
check-date.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-date
It's Sunday, October 17, 2021
```
## Notes
Author: Markus Fleschutz / License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-date.ps1*

26
docs/check-dawn.md Normal file
View File

@ -0,0 +1,26 @@
## check-dawn.ps1 - Checks the time of dawn
This script queries the time of dawn and answers by text-to-speech (TTS).
## Parameters
```powershell
check-dawn.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-dawn
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-dawn.ps1*

60
docs/check-day.md Normal file
View File

@ -0,0 +1,60 @@
*check-day.ps1*
================
This PowerShell script determines and speaks the current day by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-day.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-day
It's Sunday.
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Determines the current day
.DESCRIPTION
This PowerShell script determines and speaks the current day by text-to-speech (TTS).
.EXAMPLE
PS> ./check-day
✔️ It's Sunday.
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
[system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US"
$Weekday = (Get-Date -format "dddd")
& "$PSScriptRoot/speak-english.ps1" "It's $Weekday."
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-day.ps1 as of 10/19/2023 08:11:35)*

76
docs/check-dns.md Normal file
View File

@ -0,0 +1,76 @@
*check-dns.ps1*
================
This PowerShell script measures the DNS resolution speed (using 100 popular domains) and prints it.
Parameters
----------
```powershell
PS> ./check-dns.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-dns.ps1
DNS resolves 56.5 domains per second
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Check the DNS resolution
.DESCRIPTION
This PowerShell script measures the DNS resolution speed (using 100 popular domains) and prints it.
.EXAMPLE
PS> ./check-dns.ps1
✅ DNS resolves 56.5 domains per second
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
Write-Progress "⏳ Measuring DNS resolution..."
$table = Import-CSV "$PSScriptRoot/../Data/popular-domains.csv"
$numRows = $table.Length
$stopWatch = [system.diagnostics.stopwatch]::startNew()
if ($IsLinux) {
foreach($row in $table){$nop=dig $row.Domain +short}
} else {
foreach($row in $table){$nop=Resolve-DNSName $row.Domain}
}
[float]$elapsed = $stopWatch.Elapsed.TotalSeconds
Write-Progress -completed " "
$average = [math]::round($numRows / $elapsed, 1)
if ($average -lt 10.0) {
Write-Host "⚠️ DNS resolves $average domains per second only"
} else {
Write-Host "✅ DNS resolves $average domains per second"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-dns.ps1 as of 10/19/2023 08:11:35)*

94
docs/check-drive-space.md Normal file
View File

@ -0,0 +1,94 @@
*check-drive-space.ps1*
================
This PowerShell script checks a drive for free space left (20 GB by default).
Parameters
----------
```powershell
PS> ./check-drive-space.ps1 [[-Drive] <String>] [[-MinLevel] <Int32>] [<CommonParameters>]
-Drive <String>
Specifies the drive to check
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
-MinLevel <Int32>
Specifies the minimum level in Gigabyte
Required? false
Position? 2
Default value 20
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-drive-space C
172 GB left on drive C (61 of 233 GB used)
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks a drive for free space left
.DESCRIPTION
This PowerShell script checks a drive for free space left (20 GB by default).
.PARAMETER Drive
Specifies the drive to check
.PARAMETER MinLevel
Specifies the minimum level in Gigabyte
.EXAMPLE
PS> ./check-drive-space C
✔️ 172 GB left on drive C (61 of 233 GB used)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Drive = "", [int]$MinLevel = 20) # minimum level in GB
try {
if ($Drive -eq "" ) { $Drive = read-host "Enter drive to check" }
$DriveDetails = (get-psdrive $Drive)
[int]$Free = (($DriveDetails.Free / 1024) / 1024) / 1024
[int]$Used = (($DriveDetails.Used / 1024) / 1024) / 1024
[int]$Total = ($Used + $Free)
if ($Free -lt $MinLevel) {
write-warning "Drive $Drive has only $Free GB left to use! ($Used of $Total GB used, minimum is $MinLevel GB)"
exit 1
}
& "$PSScriptRoot/speak-english.ps1" "Drive $Drive has $Free GB left ($Total GB total)"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-drive-space.ps1 as of 10/19/2023 08:11:35)*

108
docs/check-drives.md Normal file
View File

@ -0,0 +1,108 @@
*check-drives.ps1*
================
This PowerShell script queries the free space of all drives and prints it.
Parameters
----------
```powershell
PS> ./check-drives.ps1 [[-minLevel] <Int64>] [<CommonParameters>]
-minLevel <Int64>
Specifies the minimum warning level (10 GB by default)
Required? false
Position? 1
Default value 10
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-drives.ps1
Drive C: uses 49%, 512GB free of 1TB
Drive D: uses 84%, 641GB free of 4TB
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the drive space
.DESCRIPTION
This PowerShell script queries the free space of all drives and prints it.
.PARAMETER minLevel
Specifies the minimum warning level (10 GB by default)
.EXAMPLE
PS> ./check-drives.ps1
✅ Drive C: uses 49%, 512GB free of 1TB
✅ Drive D: uses 84%, 641GB free of 4TB
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([int64]$minLevel = 10) # 10 GB minimum
function Bytes2String { param([int64]$bytes)
if ($bytes -lt 1000) { return "$bytes bytes" }
$bytes /= 1000
if ($bytes -lt 1000) { return "$($bytes)KB" }
$bytes /= 1000
if ($bytes -lt 1000) { return "$($bytes)MB" }
$bytes /= 1000
if ($bytes -lt 1000) { return "$($bytes)GB" }
$bytes /= 1000
if ($bytes -lt 1000) { return "$($bytes)TB" }
$bytes /= 1000
return "$($bytes)PB"
}
try {
Write-Progress "⏳ Querying drives..."
$drives = Get-PSDrive -PSProvider FileSystem
$minLevel *= 1000 * 1000 * 1000
Write-Progress -completed "."
foreach($drive in $drives) {
$details = (Get-PSDrive $drive.Name)
if ($IsLinux) { $name = $drive.Name } else { $name = $drive.Name + ":" }
[int64]$free = $details.Free
[int64]$used = $details.Used
[int64]$total = ($used + $free)
if ($total -eq 0) {
Write-Host "✅ Drive $name is empty"
} elseif ($free -eq 0) {
Write-Host "⚠️ Drive $name with $(Bytes2String $total) is full"
} elseif ($free -lt $minLevel) {
Write-Host "⚠️ Drive $name with $(Bytes2String $total) is nearly full, $(Bytes2String $free) free"
} else {
[int]$percent = ($used * 100) / $total
Write-Host "✅ Drive $name uses $percent%, $(Bytes2String $free) free of $(Bytes2String $total)"
}
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-drives.ps1 as of 10/19/2023 08:11:35)*

66
docs/check-dusk.md Normal file
View File

@ -0,0 +1,66 @@
*check-dusk.ps1*
================
check-dusk.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the time of dusk
.DESCRIPTION
This PowerShell script queries the time of dusk and answers by text-to-speech (TTS).
.EXAMPLE
PS> ./check-dusk.ps1
Dusk is in 2 hours at 8 PM.
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function TimeSpanToString { param([TimeSpan]$Delta)
$Result = ""
if ($Delta.Hours -eq 1) { $Result += "1 hour and "
} elseif ($Delta.Hours -gt 1) { $Result += "$($Delta.Hours) hours and "
}
if ($Delta.Minutes -eq 1) { $Result += "1 minute"
} else { $Result += "$($Delta.Minutes) minutes"
}
return $Result
}
try {
[system.threading.thread]::currentThread.currentCulture=[system.globalization.cultureInfo]"en-US"
$String = (Invoke-WebRequest http://wttr.in/?format="%d" -UserAgent "curl" -useBasicParsing).Content
$Hour,$Minute,$Second = $String -split ':'
$Dusk = Get-Date -Hour $Hour -Minute $Minute -Second $Second
$Now = [DateTime]::Now
if ($Now -lt $Dusk) {
$TimeSpan = TimeSpanToString($Dusk - $Now)
$Reply = "Dusk is in $TimeSpan at $($Dusk.ToShortTimeString())."
} else {
$TimeSpan = TimeSpanToString($Now - $Dusk)
$Reply = "Dusk was $TimeSpan ago at $($Dusk.ToShortTimeString())."
}
Write-Output $Reply
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-dusk.ps1 as of 10/19/2023 08:11:35)*

26
docs/check-earth.md Normal file
View File

@ -0,0 +1,26 @@
## check-earth.ps1 - Checks the earth (fun)
This script checks the earth and replies by text-to-speech (TTS).
## Parameters
```powershell
check-earth.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-earth
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-earth.ps1*

View File

@ -0,0 +1,64 @@
*check-easter-sunday.ps1*
================
This PowerShell script checks the time until Easter Sunday and replies by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-easter-sunday.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-easter-sunday
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the time until Easter Sunday
.DESCRIPTION
This PowerShell script checks the time until Easter Sunday and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-easter-sunday
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Now = [DateTime]::Now
$Easter = [Datetime]("04/17/2022")
if ($Now -lt $Easter) {
$Diff = $Easter $Now
& "$PSScriptRoot/speak-english.ps1" "Easter Sunday on April 17 is in $($Diff.Days) days."
} else {
$Diff = $Now - $Easter
& "$PSScriptRoot/speak-english.ps1" "Easter Sunday on April 17 was $($Diff.Days) days ago."
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-easter-sunday.ps1 as of 10/19/2023 08:11:35)*

26
docs/check-ether-rate.md Normal file
View File

@ -0,0 +1,26 @@
## check-ether-rate.ps1 - Checks the Ether rate
This script queries the current Ethereum exchange rates and answers by text-to-speech (TTS).
## Parameters
```powershell
check-ether-rate.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-ether-rate
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-ether-rate.ps1*

78
docs/check-file-system.md Normal file
View File

@ -0,0 +1,78 @@
*check-file-system.ps1*
================
This PowerShell script checks the file system of a drive. It needs admin rights.
Parameters
----------
```powershell
PS> ./check-file-system.ps1 [[-Drive] <String>] [<CommonParameters>]
-Drive <String>
Specifies the drive to check
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-file-system C
file system on drive C is clean
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the file system of a drive (needs admin rights)
.DESCRIPTION
This PowerShell script checks the file system of a drive. It needs admin rights.
.PARAMETER Drive
Specifies the drive to check
.EXAMPLE
PS> ./check-file-system C
✔️ file system on drive C is clean
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
#Requires -RunAsAdministrator
param([string]$Drive = "")
try {
if ($Drive -eq "" ) { $Drive = read-host "Enter drive (letter) to check" }
$Result = repair-volume -driveLetter $Drive -scan
if ($Result -ne "NoErrorsFound") { throw "'repair-volume' failed" }
& "$PSScriptRoot/speak-english.ps1" "File system on drive $Drive is clean."
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-file-system.ps1 as of 10/19/2023 08:11:35)*

173
docs/check-file.md Normal file
View File

@ -0,0 +1,173 @@
*check-file.ps1*
================
This PowerShell script determines and prints the file type of the given file.
Parameters
----------
```powershell
PS> ./check-file.ps1 [[-Path] <String>] [<CommonParameters>]
-Path <String>
Specifies the path to the file
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-file C:\my.exe
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks a file
.DESCRIPTION
This PowerShell script determines and prints the file type of the given file.
.PARAMETER Path
Specifies the path to the file
.EXAMPLE
PS> ./check-file C:\my.exe
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Path = "")
function Check-Header { param( $path )
$path = Resolve-Path $path
# Hexidecimal signatures for expected files
$known = @'
"Extension","Header"
"3gp","66 74 79 70 33 67"
"7z","37 7A BC AF 27 1C"
"8sv","38 53 56 58"
"8svx","46 4F 52 4D nn nn nn nn"
"acbm","46 4F 52 4D nn nn nn nn"
"aif","41 49 46 46"
"aiff","46 4F 52 4D nn nn nn nn"
"anbm","46 4F 52 4D nn nn nn nn"
"anim","46 4F 52 4D nn nn nn nn "
"asf","30 26 B2 75 8E 66 CF 11"
"avi","52 49 46 46 nn nn nn nn "
"bac","42 41 43 4B 4D 49 4B 45"
"bpg","42 50 47 FB"
"cab","4D 53 43 46"
"cin","80 2A 5F D7"
"class","CA FE BA BE"
"cmus","46 4F 52 4D nn nn nn nn"
"cr2","49 49 2A 00 10 00 00 00"
"crx","43 72 32 34"
"cwk","05 07 00 00 42 4F 42 4F"
"cwk","06 07 E1 00 42 4F 42 4F"
"dat","50 4D 4F 43 43 4D 4F 43"
"DBA","BE BA FE CA"
"DBA","00 01 42 44"
"dex","64 65 78 0A 30 33 35 00"
"djvu","41 54 26 54 46 4F 52 4D nn nn nn nn 44 4A 56"
"dmg","78 01 73 0D 62 62 60"
"doc","D0 CF 11 E0 A1 B1 1A E1"
"dpx","53 44 50 58"
"exr","76 2F 31 01"
"fax","46 41 58 58"
"faxx","46 4F 52 4D nn nn nn nn"
"fh8","41 47 44 33"
"fits","53 49 4D 50 4C 45 20 20"
"flac","66 4C 61 43"
"flif","46 4C 49 46"
"ftxt","46 4F 52 4D nn nn nn nn"
"gif","47 49 46 38 37 61"
"ico","00 00 01 00"
"idx","49 4E 44 58"
"iff","41 43 42 4D"
"iff","41 4E 42 4D"
"iff","41 4E 49 4D"
"iff","46 4F 52 4D nn nn nn nn"
"ilbm","46 4F 52 4D nn nn nn nn"
"iso","43 44 30 30 31"
"jpg","FF D8 FF DB"
"lbm","49 4C 42 4D"
"lz","4C 5A 49 50"
"lz4","04 22 4D 18"
"mid","4D 54 68 64"
"mkv","1A 45 DF A3"
"MLV","4D 4C 56 49"
"mus","43 4D 55 53"
"nes","4E 45 53 1A"
"ods","50 4B 05 06"
"ogg","4F 67 67 53"
"PDB","00 00 00 00 00 00 00 00"
"pdf","25 50 44 46"
"png","89 50 4E 47 0D 0A 1A 0A"
"ps","25 21 50 53"
"psd","38 42 50 53"
"rar","52 61 72 21 1A 07 00"
"rar","52 61 72 21 1A 07 01 00"
"smu","53 4D 55 53"
"smus","46 4F 52 4D nn nn nn nn"
"stg","4D 49 4C 20"
"tar","75 73 74 61 72 00 30 30"
"TDA","00 01 44 54"
"tif","49 49 2A 00"
"toast","45 52 02 00 00 00"
"tox","74 6F 78 33"
"txt","46 54 58 54"
"vsdx","50 4B 07 08"
"wav","52 49 46 46 nn nn nn nn"
"wma","A6 D9 00 AA 00 62 CE 6C"
"xar","78 61 72 21"
"yuv","59 55 56 4E"
"yuvn","46 4F 52 4D nn nn nn nn"
"zip","50 4B 03 04"
"epub","50 4B 03 04 0A 00 02 00"
'@ | ConvertFrom-Csv | sort {$_.header.length} -Descending
$known | % {$_.header = $_.header -replace '\s'}
try {
# Get content of each file (up to 4 bytes) for analysis
$HeaderAsHexString = New-Object System.Text.StringBuilder
[Byte[]](Get-Content -Path $path -TotalCount 4 -Encoding Byte -ea Stop) | % {
if (("{0:X}" -f $_).length -eq 1) {
$null = $HeaderAsHexString.Append('0{0:X}' -f $_)
} else {
$null = $HeaderAsHexString.Append('{0:X}' -f $_)
}
}
# Validate file header
# might change .startswith() to -match.
# might remove 'select -f 1' to get all possible matching extensions, or just somehow make it a better match.
$known | ? {$_.header.startswith($HeaderAsHexString.ToString())} | select -f 1 | % {$_.extension}
} catch {}
}
Check-Header $Path
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-file.ps1 as of 10/19/2023 08:11:35)*

68
docs/check-firewall.md Normal file
View File

@ -0,0 +1,68 @@
*check-firewall.ps1*
================
This PowerShell script queries the status of the firewall and prints it.
Parameters
----------
```powershell
PS> ./check-firewall.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-firewall.ps1
Firewall enabled
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the firewall status
.DESCRIPTION
This PowerShell script queries the status of the firewall and prints it.
.EXAMPLE
PS> ./check-firewall.ps1
✅ Firewall enabled
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
Write-Host "✅ Firewall " -noNewline
& sudo ufw status
} else {
$enabled = (gp 'HKLM:\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile').EnableFirewall
if ($enabled) {
Write-Host "✅ Firewall enabled"
} else {
Write-Host "⚠️ Firewall disabled"
}
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-firewall.ps1 as of 10/19/2023 08:11:35)*

68
docs/check-gpu.md Normal file
View File

@ -0,0 +1,68 @@
*check-gpu.ps1*
================
check-gpu.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the GPU status
.DESCRIPTION
This PowerShell script queries the GPU status and prints it.
.EXAMPLE
PS> ./check-gpu.ps1
✅ NVIDIA Quadro P400 GPU (2GB RAM, 3840x2160 pixels, 32-bit, 59Hz, driver 31.0.15.1740, status OK)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function Bytes2String { param([int64]$Bytes)
if ($Bytes -lt 1000) { return "$Bytes bytes" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)KB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)MB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)GB" }
$Bytes /= 1000
return "$($Bytes)TB"
}
try {
if ($IsLinux) {
# TODO
} else {
$Details = Get-WmiObject Win32_VideoController
$Model = $Details.Caption
$RAMSize = $Details.AdapterRAM
$ResWidth = $Details.CurrentHorizontalResolution
$ResHeight = $Details.CurrentVerticalResolution
$BitsPerPixel = $Details.CurrentBitsPerPixel
$RefreshRate = $Details.CurrentRefreshRate
$DriverVersion = $Details.DriverVersion
$Status = $Details.Status
Write-Host "✅ $Model GPU ($(Bytes2String $RAMSize) RAM, $($ResWidth)x$($ResHeight) pixels, $($BitsPerPixel)-bit, $($RefreshRate)Hz, driver $DriverVersion, status $Status)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-gpu.ps1 as of 10/19/2023 08:11:35)*

66
docs/check-hardware.md Normal file
View File

@ -0,0 +1,66 @@
*check-hardware.ps1*
================
This PowerShell script queries the hardware details of the local computer and prints it.
Parameters
----------
```powershell
PS> ./check-hardware.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-hardware.ps1
H A R D W A R E
Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz (CPU0, 2701MHz, socket U3E1, 30.1°C)
...
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the hardware
.DESCRIPTION
This PowerShell script queries the hardware details of the local computer and prints it.
.EXAMPLE
PS> ./check-hardware.ps1
H A R D W A R E
✅ Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz (CPU0, 2701MHz, socket U3E1, 30.1°C)
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
" "
& "$PSScriptRoot/write-green.ps1" " H A R D W A R E"
& "$PSScriptRoot/check-cpu.ps1"
& "$PSScriptRoot/check-ram.ps1"
& "$PSScriptRoot/check-gpu.ps1"
& "$PSScriptRoot/check-smart-devices.ps1"
& "$PSScriptRoot/check-drives.ps1"
& "$PSScriptRoot/check-power.ps1"
exit 0 # success
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-hardware.ps1 as of 10/19/2023 08:11:36)*

44
docs/check-headlines.md Normal file
View File

@ -0,0 +1,44 @@
## check-headlines.ps1 - Checks the latests headlines
This script tells the latest headlines by text-to-speech (TTS).
## Parameters
```powershell
check-headlines.ps1 [[-RSS_URL] <String>] [[-MaxCount] <Int32>] [<CommonParameters>]
-RSS_URL <String>
Specifies the URL to the RSS feed
Required? false
Position? 1
Default value https://yahoo.com/news/rss/world
Accept pipeline input? false
Accept wildcard characters? false
-MaxCount <Int32>
Specifies the number of news to list
Required? false
Position? 2
Default value 8
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-headlines
```
## Notes
Author: Markus Fleschutz / License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-headlines.ps1*

61
docs/check-health.md Normal file
View File

@ -0,0 +1,61 @@
*check-health.ps1*
================
This PowerShell script queries the system health of the local computer (hardware, software, and network) and prints it.
Parameters
----------
```powershell
PS> ./check-health.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-health.ps1
H A R D W A R E
Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz (CPU0, 2701MHz, socket U3E1, 30.1°C)
...
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the system health
.DESCRIPTION
This PowerShell script queries the system health of the local computer (hardware, software, and network) and prints it.
.EXAMPLE
PS> ./check-health.ps1
H A R D W A R E
✅ Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz (CPU0, 2701MHz, socket U3E1, 30.1°C)
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
& "$PSScriptRoot/check-hardware.ps1"
& "$PSScriptRoot/check-software.ps1"
& "$PSScriptRoot/check-network.ps1"
exit 0 # success
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-health.ps1 as of 10/19/2023 08:11:36)*

View File

@ -0,0 +1,64 @@
*check-independence-day.ps1*
================
This PowerShell script checks the time until Indepence Day and replies by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-independence-day.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-independence-day.ps1
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the time until Independence Day
.DESCRIPTION
This PowerShell script checks the time until Indepence Day and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-independence-day.ps1
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Now = [DateTime]::Now
$IndependenceDay = [Datetime]("07/04/" + $Now.Year)
if ($Now -lt $IndependenceDay) {
$Diff = $IndependenceDay $Now
& "$PSScriptRoot/speak-english.ps1" "Independence Day on July 4th is in $($Diff.Days) days."
} else {
$Diff = $Now - $IndependenceDay
& "$PSScriptRoot/speak-english.ps1" "Independence Day on July 4th was $($Diff.Days) days ago."
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-independence-day.ps1 as of 10/19/2023 08:11:36)*

67
docs/check-ip.md Normal file
View File

@ -0,0 +1,67 @@
*check-ip.ps1*
================
This PowerShell script queries the public IP address and prints it.
Parameters
----------
```powershell
PS> ./check-ip.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-ip.ps1
Public IPv4 185.77.209.161, IPv6 2003:f2:6128:fc01:e503:601:30c2:a028 near Munich
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the IP address
.DESCRIPTION
This PowerShell script queries the public IP address and prints it.
.EXAMPLE
PS> ./check-ip.ps1
✅ Public IPv4 185.77.209.161, IPv6 2003:f2:6128:fc01:e503:601:30c2:a028 near Munich
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$PublicIPv4 = (curl -4 --silent ifconfig.co)
$PublicIPv6 = (curl -6 --silent ifconfig.co)
$City = (curl --silent ifconfig.co/city)
} else {
$PublicIPv4 = (curl.exe -4 --silent ifconfig.co)
$PublicIPv6 = (curl.exe -6 --silent ifconfig.co)
$City = (curl.exe --silent ifconfig.co/city)
}
Write-Output "✅ Public IPv4 $PublicIPv4, IPv6 $PublicIPv6 near $City"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-ip.ps1 as of 08/06/2023 21:36:06)*

View File

@ -0,0 +1,87 @@
*check-ipv4-address.ps1*
================
This PowerShell script checks the given IPv4 address for validity.
Parameters
----------
```powershell
PS> ./check-ipv4-address.ps1 [[-Address] <String>] [<CommonParameters>]
-Address <String>
Specifies the IPv4 address to check
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-ipv4-address 192.168.11.22
IPv4 192.168.11.22 is valid
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks an IPv4 address for validity
.DESCRIPTION
This PowerShell script checks the given IPv4 address for validity.
.PARAMETER Address
Specifies the IPv4 address to check
.EXAMPLE
PS> ./check-ipv4-address 192.168.11.22
✔️ IPv4 192.168.11.22 is valid
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Address = "")
function IsIPv4AddressValid { param([string]$IP)
$RegEx = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
if ($IP -match $RegEx) {
return $true
} else {
return $false
}
}
try {
if ($Address -eq "" ) { $Address = read-host "Enter IPv4 address to validate" }
if (IsIPv4AddressValid $Address) {
"✔️ IPv4 $Address is valid"
exit 0 # success
} else {
write-warning "Invalid IPv4 address: $Address"
exit 1
}
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-ipv4-address.ps1 as of 10/19/2023 08:11:36)*

101
docs/check-ipv6-address.md Normal file
View File

@ -0,0 +1,101 @@
*check-ipv6-address.ps1*
================
This PowerShell script checks the given IPv6 address for validity
Parameters
----------
```powershell
PS> ./check-ipv6-address.ps1 [[-Address] <String>] [<CommonParameters>]
-Address <String>
Specifies the IPv6 address to check
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-ipv6-address fe80::200:5aee:feaa:20a2
IPv6 fe80::200:5aee:feaa:20a2 is valid
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks an IPv6 address for validity
.DESCRIPTION
This PowerShell script checks the given IPv6 address for validity
.PARAMETER Address
Specifies the IPv6 address to check
.EXAMPLE
PS> ./check-ipv6-address fe80::200:5aee:feaa:20a2
✔️ IPv6 fe80::200:5aee:feaa:20a2 is valid
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Address = "")
function IsIPv6AddressValid { param([string]$IP)
$IPv4Regex = '(((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))'
$G = '[a-f\d]{1,4}'
$Tail = @(":",
"(:($G)?|$IPv4Regex)",
":($IPv4Regex|$G(:$G)?|)",
"(:$IPv4Regex|:$G(:$IPv4Regex|(:$G){0,2})|:)",
"((:$G){0,2}(:$IPv4Regex|(:$G){1,2})|:)",
"((:$G){0,3}(:$IPv4Regex|(:$G){1,2})|:)",
"((:$G){0,4}(:$IPv4Regex|(:$G){1,2})|:)")
[string] $IPv6RegexString = $G
$Tail | foreach { $IPv6RegexString = "${G}:($IPv6RegexString|$_)" }
$IPv6RegexString = ":(:$G){0,5}((:$G){1,2}|:$IPv4Regex)|$IPv6RegexString"
$IPv6RegexString = $IPv6RegexString -replace '\(' , '(?:' # make all groups non-capturing
[regex] $IPv6Regex = $IPv6RegexString
if ($IP -imatch "^$IPv6Regex$") {
return $true
} else {
return $false
}
}
try {
if ($Address -eq "" ) {
$Address = read-host "Enter IPv6 address to validate"
}
if (IsIPv6AddressValid $Address) {
"✔️ IPv6 $Address is valid"
exit 0 # success
} else {
write-warning "Invalid IPv6 address: $Address"
exit 1
}
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-ipv6-address.ps1 as of 10/19/2023 08:11:36)*

View File

@ -0,0 +1,58 @@
*check-iss-position.ps1*
================
This PowerShell script queries the position of the International Space Station (ISS) and replies by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-iss-position.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-iss-position
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the ISS position
.DESCRIPTION
This PowerShell script queries the position of the International Space Station (ISS) and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-iss-position
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$ISS = (Invoke-WebRequest "http://api.open-notify.org/iss-now.json" -userAgent "curl" -useBasicParsing).Content | ConvertFrom-Json
& "$PSScriptRoot/speak-english.ps1" "The International Space Station is currently at $($ISS.iss_position.longitude)° longitude and $($ISS.iss_position.latitude)° latitude."
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-iss-position.ps1 as of 10/19/2023 08:11:36)*

90
docs/check-mac-address.md Normal file
View File

@ -0,0 +1,90 @@
*check-mac-address.ps1*
================
This PowerShell script checks the given MAC address for validity
Supported MAC address formats are: 00:00:00:00:00:00 or 00-00-00-00-00-00 or 000000000000.
Parameters
----------
```powershell
PS> ./check-mac-address.ps1 [[-MAC] <String>] [<CommonParameters>]
-MAC <String>
Specifies the MAC address to check
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-mac-address 11:22:33:44:55:66
MAC address 11:22:33:44:55:66 is valid
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the given MAC address for validity
.DESCRIPTION
This PowerShell script checks the given MAC address for validity
Supported MAC address formats are: 00:00:00:00:00:00 or 00-00-00-00-00-00 or 000000000000.
.PARAMETER MAC
Specifies the MAC address to check
.EXAMPLE
PS> ./check-mac-address 11:22:33:44:55:66
✔️ MAC address 11:22:33:44:55:66 is valid
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$MAC = "")
function IsMACAddressValid { param([string]$mac)
$RegEx = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})|([0-9A-Fa-f]{2}){6}$"
if ($mac -match $RegEx) {
return $true
} else {
return $false
}
}
try {
if ($MAC -eq "" ) {
$MAC = read-host "Enter MAC address to validate"
}
if (IsMACAddressValid $MAC) {
"✔️ MAC address $MAC is valid"
exit 0 # success
} else {
write-warning "Invalid MAC address: $MAC"
exit 1
}
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-mac-address.ps1 as of 10/19/2023 08:11:36)*

63
docs/check-midnight.md Normal file
View File

@ -0,0 +1,63 @@
*check-midnight.ps1*
================
check-midnight.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks for Midnight
.DESCRIPTION
This PowerShell script checks the time until Midnight and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-midnight
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function TimeSpanToString { param([TimeSpan]$Delta)
$Result = ""
if ($Delta.Hours -eq 1) { $Result += "1 hour and "
} elseif ($Delta.Hours -gt 1) { $Result += "$($Delta.Hours) hours and "
}
if ($Delta.Minutes -eq 1) { $Result += "1 minute"
} else { $Result += "$($Delta.Minutes) minutes"
}
return $Result
}
try {
$Now = [DateTime]::Now
if ($Now.Hour -lt 12) {
$Midnight = Get-Date -Hour 0 -Minute 0 -Second 0
$TimeSpan = TimeSpanToString($Now - $Midnight)
$Reply = "Midnight was $TimeSpan ago."
} else {
$Midnight = Get-Date -Hour 23 -Minute 59 -Second 59
$TimeSpan = TimeSpanToString($Midnight - $Now)
$Reply = "Midnight is in $TimeSpan."
}
& "$PSScriptRoot/speak-english.ps1" "$Reply"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-midnight.ps1 as of 10/19/2023 08:11:36)*

60
docs/check-month.md Normal file
View File

@ -0,0 +1,60 @@
*check-month.ps1*
================
This PowerShell script determines and speaks the current month name by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-month.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-month
It's December.
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Gets the current month name
.DESCRIPTION
This PowerShell script determines and speaks the current month name by text-to-speech (TTS).
.EXAMPLE
PS> ./check-month
✔️ It's December.
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
[system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US"
$MonthName = (Get-Date -UFormat %B)
& "$PSScriptRoot/speak-english.ps1" "It's $MonthName."
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-month.ps1 as of 10/19/2023 08:11:36)*

79
docs/check-moon-phase.md Normal file
View File

@ -0,0 +1,79 @@
*check-moon-phase.ps1*
================
This PowerShell script determines the Moon phase and answers by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-moon-phase.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-moon-phase
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the Moon phase
.DESCRIPTION
This PowerShell script determines the Moon phase and answers by text-to-speech (TTS).
.EXAMPLE
PS> ./check-moon-phase
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$LunarCycle = 29.53058868 # synodic period in days, time between successive new moons
$LunarHalfCycle = $LunarCycle / 2.0
$Phases = @("New moon", "Waxing crescent moon", "First quarter moon", "Waxing gibbous moon", "Full moon", "Waning gibbous moon", "Last quarter moon", "Waning crescent moon")
$PhaseLength = $LunarCycle / 8.0
$PhaseHalfLength = $PhaseLength / 2.0
$RefDate = get-date -Year 2021 -Month 12 -Day 4 -Hour 6 -Minute 43 # Dec 4, 2021 06:43 UTC [New Moon]
$Now = get-date
$TimeInterval = New-TimeSpan -Start $RefDate -End $Now
$Days = $TimeInterval.TotalDays
$MDays = $Days % $LunarCycle
$PhaseIndex = [int]($MDays * (8.0 / $LunarCycle))
$Visibility = [math]::Round((($Days % $LunarHalfCycle) * 100) / $LunarHalfCycle)
$Reply = "$($Phases[$PhaseIndex]) with $($Visibility)% visibility"
$MoonAge = [math]::Round($Days % $LunarCycle)
if ($MoonAge -eq "0") { $Reply += " today"
} elseif ($MoonAge -eq "1") { $Reply += " since yesterday"
} else { $Reply += ", last new moon was $MoonAge days ago"
}
& "$PSScriptRoot/speak-english.ps1" "$Reply"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-moon-phase.ps1 as of 10/19/2023 08:11:36)*

26
docs/check-my-balance.md Normal file
View File

@ -0,0 +1,26 @@
## check-my-balance.ps1 - Checks the balance (fun)
This script checks the balance and replies by text-to-speech (TTS).
## Parameters
```powershell
check-my-balance.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-my-balance
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-my-balance.ps1*

67
docs/check-network.md Normal file
View File

@ -0,0 +1,67 @@
*check-network.ps1*
================
This PowerShell script queries the network details of the local computer and prints it.
Parameters
----------
```powershell
PS> ./check-network.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-network.ps1
N E T W O R K
Online with 30ms latency (16ms..56ms, 0/10 loss)
...
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the network details
.DESCRIPTION
This PowerShell script queries the network details of the local computer and prints it.
.EXAMPLE
PS> ./check-network.ps1
N E T W O R K
✅ Online with 30ms latency (16ms..56ms, 0/10 loss)
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
" "
& "$PSScriptRoot/write-green.ps1" " N E T W O R K"
& "$PSScriptRoot/check-ping.ps1"
& "$PSScriptRoot/check-firewall"
& "$PSScriptRoot/check-dns.ps1"
& "$PSScriptRoot/check-vpn.ps1"
& "$PSScriptRoot/list-public-ip.ps1"
exit 0 # success
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-network.ps1 as of 10/19/2023 08:11:36)*

63
docs/check-new-year.md Normal file
View File

@ -0,0 +1,63 @@
*check-new-year.ps1*
================
This PowerShell script checks the time until New Year and replies by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-new-year.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-new-year
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the time until New Year
.DESCRIPTION
This PowerShell script checks the time until New Year and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-new-year
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Now = [DateTime]::Now
$NewYear = [Datetime]("12/31/" + $Now.Year)
$Days = ($NewYear $Now).Days + 1
if ($Days -gt 1) {
& "$PSScriptRoot/speak-english.ps1" "New Year is in $Days days."
} elseif ($Days -eq 1) {
& "$PSScriptRoot/speak-english.ps1" "New Year is tomorrow."
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-new-year.ps1 as of 10/19/2023 08:11:36)*

62
docs/check-noon.md Normal file
View File

@ -0,0 +1,62 @@
*check-noon.ps1*
================
check-noon.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks for Noon
.DESCRIPTION
This PowerShell script checks the time until Noon and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-noon
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function TimeSpanToString { param([TimeSpan]$Delta)
$Result = ""
if ($Delta.Hours -eq 1) { $Result += "1 hour and "
} elseif ($Delta.Hours -gt 1) { $Result += "$($Delta.Hours) hours and "
}
if ($Delta.Minutes -eq 1) { $Result += "1 minute"
} else { $Result += "$($Delta.Minutes) minutes"
}
return $Result
}
try {
$Now = [DateTime]::Now
$Noon = Get-Date -Hour 12 -Minute 0 -Second 0
if ($Now -lt $Noon) {
$TimeSpan = TimeSpanToString($Noon - $Now)
$Reply = "Noon is in $TimeSpan."
} else {
$TimeSpan = TimeSpanToString($Now - $Noon)
$Reply = "Noon was $TimeSpan ago."
}
& "$PSScriptRoot/speak-english.ps1" "$Reply"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-noon.ps1 as of 10/19/2023 08:11:36)*

View File

@ -0,0 +1,64 @@
## The *check-operating-system.ps1* PowerShell Script
This PowerShell script queries and lists operating system details.
## Parameters
```powershell
check-operating-system.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-operating-system
```
## Notes
Author: Markus Fleschutz | License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
## Source Code
```powershell
<#
.SYNOPSIS
Query OS details
.DESCRIPTION
This PowerShell script queries and lists operating system details.
.EXAMPLE
PS> ./check-operating-system
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
"✅ $(uname -sr)."
} else {
$OS = Get-WmiObject -class Win32_OperatingSystem
$Name = $OS.Caption
$Arch = $OS.OSArchitecture
$Version = $OS.Version
[system.threading.thread]::currentthread.currentculture = [system.globalization.cultureinfo]"en-US"
$OSDetails = Get-CimInstance Win32_OperatingSystem
$BuildNo = $OSDetails.BuildNumber
$Serial = $OSDetails.SerialNumber
$InstallDate = $OSDetails.InstallDate
"✅ $($Name): $Arch, v$Version, S/N $Serial, installed $($InstallDate.ToShortDateString())"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*Generated by convert-ps2md.ps1 using the comment-based help of check-operating-system.ps1*

76
docs/check-os.md Normal file
View File

@ -0,0 +1,76 @@
*check-os.ps1*
================
This PowerShell script queries the operating system status and prints it.
Parameters
----------
```powershell
PS> ./check-os.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-os.ps1
Windows 10 Pro 64-bit (v10.0.19045, since 6/22/2021, S/N 00123-45678-15135-AAOEM, P/K AB123-CD456-EF789-GH000-WFR6P)
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the OS status
.DESCRIPTION
This PowerShell script queries the operating system status and prints it.
.EXAMPLE
PS> ./check-os.ps1
✅ Windows 10 Pro 64-bit (v10.0.19045, since 6/22/2021, S/N 00123-45678-15135-AAOEM, P/K AB123-CD456-EF789-GH000-WFR6P)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$Name = $PSVersionTable.OS
if ([System.Environment]::Is64BitOperatingSystem) { $Arch = "64-bit" } else { $Arch = "32-bit" }
Write-Host "✅ $Name $Arch"
} else {
$OS = Get-WmiObject -class Win32_OperatingSystem
$Name = $OS.Caption -Replace "Microsoft Windows","Windows"
$Arch = $OS.OSArchitecture
$Version = $OS.Version
[system.threading.thread]::currentthread.currentculture = [system.globalization.cultureinfo]"en-US"
$OSDetails = Get-CimInstance Win32_OperatingSystem
$BuildNo = $OSDetails.BuildNumber
$Serial = $OSDetails.SerialNumber
$InstallDate = $OSDetails.InstallDate
$ProductKey = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -Name BackupProductKeyDefault).BackupProductKeyDefault
Write-Host "✅ $Name $Arch (v$Version, since $($InstallDate.ToShortDateString()), S/N $Serial, P/K $ProductKey)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-os.ps1 as of 10/19/2023 08:11:36)*

68
docs/check-outlook.md Normal file
View File

@ -0,0 +1,68 @@
*check-outlook.ps1*
================
This PowerShell script checks the inbox of Outlook for new/unread mails.
Parameters
----------
```powershell
PS> ./check-outlook.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-outlook.ps1
No new mails.
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks Outlook's inbox
.DESCRIPTION
This PowerShell script checks the inbox of Outlook for new/unread mails.
.EXAMPLE
PS> ./check-outlook.ps1
✅ No new mails.
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$Namespace = $Outlook.GetNameSpace("MAPI")
$Inbox = $Namespace.GetDefaultFolder(6) # 6 = olFolderInbox
[int]$Unread = 0
foreach($Mail in $Inbox.Items) {
if ($Mail.Unread -eq $false) { continue }
"⚠️ New mail '$($Mail.Subject)' from $($Mail.SenderName)."
$Unread++
}
if ($Unread -eq 0) { "✅ No new mails." }
exit 0 # success
} catch {
"Sorry: $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-outlook.ps1 as of 10/19/2023 08:11:36)*

97
docs/check-password.md Normal file
View File

@ -0,0 +1,97 @@
*check-password.ps1*
================
This PowerShell script checks the security status of the given password by haveibeenpwned.com
Parameters
----------
```powershell
PS> ./check-password.ps1 [[-password] <String>] [<CommonParameters>]
-password <String>
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-password qwerty
Bad password, it's already listed in 10584568 known security breaches!
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks a password
.DESCRIPTION
This PowerShell script checks the security status of the given password by haveibeenpwned.com
.EXAMPLE
PS> ./check-password qwerty
⚠️ Bad password, it's already listed in 10584568 known security breaches!
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$password = "")
function CalculateHashSHA1 ([string]$string) {
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
$encoder = New-Object System.Text.UTF8Encoding
$bytes = $encoder.GetBytes($string)
$hash = ($sha1.ComputeHash($bytes) | % { $_.ToString("X2") }) -join ''
return $hash
}
function Get-PasswordPwnCount { [CmdletBinding()] param([string]$pass)
$hash = CalculateHashSHA1 $pass
try {
$uri = "https://api.pwnedpasswords.com/range/$($hash.Substring(0,5))"
$list = -split (Invoke-RestMethod $uri -Verbose:($PSBoundParameters['Verbose'] -eq $true) -ErrorAction Stop) # split into separate strings
$pwn = $list | Select-String $hash.Substring(5,35) # grep
if ($pwn) { $count = [int] ($pwn.ToString().Split(':')[1]) } else { $count = 0 }
return $count
}
catch {
Write-Error "Error Calling HIBP API"
return $null
}
}
try {
if ($password -eq "") { $password = Read-Host "Enter the password" }
$NumBreaches = Get-PasswordPwnCount $password
if ($NumBreaches -eq 0) {
"👍 Password seems good, it's not listed in any known security breach as of today."
} else {
"⚠️ Bad password, it's listed already in $NumBreaches known security breaches!"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-password.ps1 as of 10/19/2023 08:11:36)*

View File

@ -0,0 +1,95 @@
*check-pending-reboot.ps1*
================
check-pending-reboot.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Check for pending reboots
.DESCRIPTION
This PowerShell script queries pending operating system reboots and prints it.
.EXAMPLE
./check-pending-reboot.ps1
✅ No pending reboot
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function Test-RegistryValue { param([parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]$Path, [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Value)
try {
Get-ItemProperty -Path $Path -Name $Value -EA Stop
return $true
} catch {
return $false
}
}
try {
$Reason = ""
if ($IsLinux) {
if (Test-Path "/var/run/reboot-required") {
$Reason = "found: /var/run/reboot-required"
Write-Host "⚠️ Pending reboot ($Reason)"
}
} else {
if (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired") {
$Reason += ", ...\Auto Update\RebootRequired"
}
if (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting") {
$Reason += ", ...\Auto Update\PostRebootReporting"
}
if (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending") {
$Reason += ", ...\Component Based Servicing\RebootPending"
}
if (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts") {
$Reason += ", ...\ServerManager\CurrentRebootAttempts"
}
if (Test-RegistryValue -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing" -Value "RebootInProgress") {
$Reason += ", ...\CurrentVersion\Component Based Servicing with 'RebootInProgress'"
}
if (Test-RegistryValue -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing" -Value "PackagesPending") {
$Reason += ", '...\CurrentVersion\Component Based Servicing' with 'PackagesPending'"
}
if (Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Value "PendingFileRenameOperations2") {
$Reason += ", '...\CurrentControlSet\Control\Session Manager' with 'PendingFileRenameOperations2'"
}
if (Test-RegistryValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" -Value "DVDRebootSignal") {
$Reason += ", '...\Windows\CurrentVersion\RunOnce' with 'DVDRebootSignal'"
}
if (Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon" -Value "JoinDomain") {
$Reason += ", '...\CurrentControlSet\Services\Netlogon' with 'JoinDomain'"
}
if (Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon" -Value "AvoidSpnSet") {
$Reason += ", '...\CurrentControlSet\Services\Netlogon' with 'AvoidSpnSet'"
}
if ($Reason -ne "") {
Write-Host "⚠️ Pending reboot (registry contains $($Reason.substring(2)))"
}
}
if ($Reason -eq "") {
Write-Host "✅ No pending reboot"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-pending-reboot.ps1 as of 10/19/2023 08:11:36)*

93
docs/check-ping.md Normal file
View File

@ -0,0 +1,93 @@
*check-ping.ps1*
================
This PowerShell script measures the ping roundtrip times from the local computer to other computers (10 Internet servers by default).
Parameters
----------
```powershell
PS> ./check-ping.ps1 [[-hosts] <String>] [<CommonParameters>]
-hosts <String>
Specifies the hosts to check, seperated by commata (default is: amazon.com,bing.com,cnn.com,dropbox.com,github.com,google.com,live.com,meta.com,x.com,youtube.com)
Required? false
Position? 1
Default value bing.com,cnn.com,dropbox.com,github.com,google.com,ibm.com,live.com,meta.com,x.com,youtube.com
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-ping.ps1
Online with 18ms latency average (13ms...109ms, 0/10 ping loss)
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the ping latency
.DESCRIPTION
This PowerShell script measures the ping roundtrip times from the local computer to other computers (10 Internet servers by default).
.PARAMETER hosts
Specifies the hosts to check, seperated by commata (default is: amazon.com,bing.com,cnn.com,dropbox.com,github.com,google.com,live.com,meta.com,x.com,youtube.com)
.EXAMPLE
PS> ./check-ping.ps1
✅ Online with 18ms latency average (13ms...109ms, 0/10 ping loss)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$hosts = "bing.com,cnn.com,dropbox.com,github.com,google.com,ibm.com,live.com,meta.com,x.com,youtube.com")
try {
$hostsArray = $hosts.Split(",")
$parallelTasks = $hostsArray | foreach {
(New-Object Net.NetworkInformation.Ping).SendPingAsync($_,750)
}
[int]$min = 9999999
[int]$max = [int]$avg = [int]$success = 0
[int]$total = $hostsArray.Count
[Threading.Tasks.Task]::WaitAll($parallelTasks)
foreach($ping in $parallelTasks.Result) {
if ($ping.Status -ne "Success") { continue }
$success++
[int]$latency = $ping.RoundtripTime
$avg += $latency
if ($latency -lt $min) { $min = $latency }
if ($latency -gt $max) { $max = $latency }
}
[int]$loss = $total - $success
if ($success -ne 0) {
$avg /= $success
Write-Host "✅ Online with $($avg)ms latency average ($($min)ms...$($max)ms, $loss/$total ping loss)"
} else {
Write-Host "⚠️ Offline ($loss/$total ping loss)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-ping.ps1 as of 10/19/2023 08:11:36)*

95
docs/check-power.md Normal file
View File

@ -0,0 +1,95 @@
*check-power.ps1*
================
This PowerShell script queries the power status and prints it.
Parameters
----------
```powershell
PS> ./check-power.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-power.ps1
Battery at 9% · 54 min remaining · power scheme 'HP Optimized'
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the power status
.DESCRIPTION
This PowerShell script queries the power status and prints it.
.EXAMPLE
PS> ./check-power.ps1
⚠️ Battery at 9% · 54 min remaining · power scheme 'HP Optimized'
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
if ($IsLinux) {
$reply = "✅ AC powered" # TODO, just guessing :-)
} else {
Add-Type -Assembly System.Windows.Forms
$details = [System.Windows.Forms.SystemInformation]::PowerStatus
[int]$percent = 100 * $details.BatteryLifePercent
[int]$remaining = $details.BatteryLifeRemaining / 60
if ($details.PowerLineStatus -eq "Online") {
if ($details.BatteryChargeStatus -eq "NoSystemBattery") {
$reply = "✅ AC powered"
} elseif ($percent -ge 95) {
$reply = "✅ Battery $percent% fully charged"
} else {
$reply = "✅ Battery charging... ($percent%)"
}
} else { # must be offline
if (($remaining -eq 0) -and ($percent -ge 60)) {
$reply = "✅ Battery $percent% full"
} elseif ($remaining -eq 0) {
$reply = "✅ Battery at $percent%"
} elseif ($remaining -le 5) {
$reply = "⚠️ Battery at $percent% · ONLY $($remaining)min remaining"
} elseif ($remaining -le 30) {
$reply = "⚠️ Battery at $percent% · only $($remaining)min remaining"
} elseif ($percent -lt 10) {
$reply = "⚠️ Battery at $percent% · $($remaining)min remaining"
} elseif ($percent -ge 60) {
$reply = "✅ Battery $percent% full · $($remaining)min remaining"
} else {
$reply = "✅ Battery at $percent% · $($remaining)min remaining"
}
}
$powerScheme = (powercfg /getactivescheme)
$powerScheme = $powerScheme -Replace "^(.*) \(",""
$powerScheme = $powerScheme -Replace "\)$",""
$reply += " · power scheme '$powerScheme'"
}
Write-Output $reply
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-power.ps1 as of 10/19/2023 08:11:36)*

67
docs/check-powershell.md Normal file
View File

@ -0,0 +1,67 @@
*check-powershell.ps1*
================
This PowerShell script queries the PowerShell status and prints it.
Parameters
----------
```powershell
PS> ./check-powershell.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-powershell.ps1
PowerShell 5.1.19041.2673 Desktop edition (10 modules, 1458 cmdlets, 172 aliases)
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Check the PowerShell status
.DESCRIPTION
This PowerShell script queries the PowerShell status and prints it.
.EXAMPLE
PS> ./check-powershell.ps1
✅ PowerShell 5.1.19041.2673 Desktop edition (10 modules, 1458 cmdlets, 172 aliases)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$version = $PSVersionTable.PSVersion
$edition = $PSVersionTable.PSEdition
$numModules = (Get-Module).Count
$numAliases = (Get-Alias).Count
if ($IsLinux) {
"✅ PowerShell $version $edition edition ($numModules modules, $numAliases aliases)"
} else {
$numCmdlets = (Get-Command -Command-Type cmdlet).Count
"✅ PowerShell $version $edition edition ($numModules modules, $numCmdlets cmdlets, $numAliases aliases)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-powershell.ps1 as of 10/19/2023 08:11:36)*

79
docs/check-ps1-file.md Normal file
View File

@ -0,0 +1,79 @@
*check-ps1-file.ps1*
================
This PowerShell script checks the given PowerShell script file(s) for validity.
Parameters
----------
```powershell
PS> ./check-ps1-file.ps1 [[-filePattern] <String>] [<CommonParameters>]
-filePattern <String>
Specifies the file pattern to the PowerShell file(s)
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-ps1-file *.ps1
Valid PowerShell in myfile.ps1
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks PowerShell file(s) for validity
.DESCRIPTION
This PowerShell script checks the given PowerShell script file(s) for validity.
.PARAMETER filePattern
Specifies the file pattern to the PowerShell file(s)
.EXAMPLE
PS> ./check-ps1-file *.ps1
✔️ Valid PowerShell in myfile.ps1
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$filePattern = "")
try {
if ($filePattern -eq "" ) { $path = Read-Host "Enter the file pattern to the PowerShell file(s)" }
$files = Get-ChildItem -path "$filePattern" -attributes !Directory
foreach ($file in $files) {
$syntaxError = @()
[void][System.Management.Automation.Language.Parser]::ParseFile($file, [ref]$null, [ref]$syntaxError)
if ("$syntaxError" -ne "") { throw "$syntaxError" }
"✔️ Valid PowerShell in $($file.Name)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-ps1-file.ps1 as of 10/19/2023 08:11:36)*

101
docs/check-ram.md Normal file
View File

@ -0,0 +1,101 @@
*check-ram.ps1*
================
check-ram.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the RAM
.DESCRIPTION
This PowerShell script queries the status of the installed RAM memory modules and prints it.
.EXAMPLE
PS> ./check-ram.ps1
✅ 16GB DDR4 RAM @ 3200MHz by Micron (in CPU0/CPU0-DIMM3 @ 1.2V)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function GetRAMType { param([int]$Type)
switch($Type) {
2 { return "DRAM" }
5 { return "EDO RAM" }
6 { return "EDRAM" }
7 { return "VRAM" }
8 { return "SRAM" }
10 { return "ROM" }
11 { return "Flash" }
12 { return "EEPROM" }
13 { return "FEPROM" }
14 { return "EPROM" }
15 { return "CDRAM" }
16 { return "3DRAM" }
17 { return "SDRAM" }
18 { return "SGRAM" }
19 { return "RDRAM" }
20 { return "DDR RAM" }
21 { return "DDR2 RAM" }
22 { return "DDR2 FB-DIMM" }
24 { return "DDR3 RAM" }
26 { return "DDR4 RAM" }
27 { return "DDR5 RAM" }
28 { return "DDR6 RAM" }
29 { return "DDR7 RAM" }
default { return "RAM" }
}
}
function Bytes2String { param([int64]$Bytes)
if ($Bytes -lt 1024) { return "$Bytes bytes" }
$Bytes /= 1024
if ($Bytes -lt 1024) { return "$($Bytes)KB" }
$Bytes /= 1024
if ($Bytes -lt 1024) { return "$($Bytes)MB" }
$Bytes /= 1024
if ($Bytes -lt 1024) { return "$($Bytes)GB" }
$Bytes /= 1024
if ($Bytes -lt 1024) { return "$($Bytes)TB" }
$Bytes /= 1024
if ($Bytes -lt 1024) { return "$($Bytes)PB" }
$Bytes /= 1024
if ($Bytes -lt 1024) { return "$($Bytes)EB" }
}
try {
if ($IsLinux) {
# TODO
} else {
$Banks = Get-WmiObject -Class Win32_PhysicalMemory
foreach ($Bank in $Banks) {
$Capacity = Bytes2String($Bank.Capacity)
$Type = GetRAMType $Bank.SMBIOSMemoryType
$Speed = $Bank.Speed
[float]$Voltage = $Bank.ConfiguredVoltage / 1000.0
$Manufacturer = $Bank.Manufacturer
$Location = "$($Bank.BankLabel)/$($Bank.DeviceLocator)"
Write-Host "✅ $Capacity $Type @ $($Speed)MHz by $Manufacturer (in $Location @ $($Voltage)V)"
}
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-ram.ps1 as of 10/19/2023 08:11:36)*

131
docs/check-repo.md Normal file
View File

@ -0,0 +1,131 @@
*check-repo.ps1*
================
This PowerShell script verifies the integrity of a local Git repository.
Parameters
----------
```powershell
PS> ./check-repo.ps1 [[-RepoDir] <String>] [<CommonParameters>]
-RepoDir <String>
Specifies the path to the Git repository (current working directory by default)
Required? false
Position? 1
Default value "$PWD"
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-repo.ps1 C:\MyRepo
(1/10) Searching for Git executable... git version 2.41.0.windows.3
(2/10) Checking local folder... 📂C:\MyRepo
(3/10) Querying remote URL... git@github.com:fleschutz/PowerShell.git
(4/10) Querying current branch... main
(5/10) Fetching remote updates...
(6/10) Querying latest tag... v0.8 (commit 02171a401d83b01a0cda0af426840b605e617f08)
(7/10) Verifying data integrity...
...
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks a repo
.DESCRIPTION
This PowerShell script verifies the integrity of a local Git repository.
.PARAMETER RepoDir
Specifies the path to the Git repository (current working directory by default)
.EXAMPLE
PS> ./check-repo.ps1 C:\MyRepo
⏳ (1/10) Searching for Git executable... git version 2.41.0.windows.3
⏳ (2/10) Checking local folder... 📂C:\MyRepo
⏳ (3/10) Querying remote URL... git@github.com:fleschutz/PowerShell.git
⏳ (4/10) Querying current branch... main
⏳ (5/10) Fetching remote updates...
⏳ (6/10) Querying latest tag... v0.8 (commit 02171a401d83b01a0cda0af426840b605e617f08)
⏳ (7/10) Verifying data integrity...
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$RepoDir = "$PWD")
try {
$StopWatch = [system.diagnostics.stopwatch]::startNew()
Write-Host "⏳ (1/10) Searching for Git executable... " -noNewline
& git --version
if ($lastExitCode -ne "0") { throw "Can't execute 'git' - make sure Git is installed and available" }
Write-Host "⏳ (2/10) Checking local folder... " -noNewline
$FullPath = Resolve-Path "$RepoDir"
if (!(Test-Path "$FullPath" -pathType Container)) { throw "Can't access folder: $FullPath" }
"📂$FullPath"
Write-Host "⏳ (3/10) Querying remote URL... " -noNewline
& git -C "$FullPath" remote get-url origin
if ($lastExitCode -ne "0") { throw "'git remote get-url origin' failed with exit code $lastExitCode" }
Write-Host "⏳ (4/10) Querying current branch... " -noNewline
& git -C "$FullPath" branch --show-current
if ($lastExitCode -ne "0") { throw "'git branch --show-current' failed with exit code $lastExitCode" }
Write-Host "⏳ (5/10) Fetching remote updates..."
& git -C "$FullPath" fetch
if ($lastExitCode -ne "0") { throw "'git fetch' failed with exit code $lastExitCode" }
Write-Host "⏳ (6/10) Querying latest tag... " -noNewline
$LatestTagCommitID = (git -C "$FullPath" rev-list --tags --max-count=1)
$LatestTagName = (git -C "$FullPath" describe --tags $LatestTagCommitID)
Write-Host "$LatestTagName (commit $LatestTagCommitID)"
Write-Host "⏳ (7/10) Verifying data integrity..."
& git -C "$FullPath" fsck
if ($lastExitCode -ne "0") { throw "'git fsck' failed with exit code $lastExitCode" }
Write-Host "⏳ (8/10) Running maintenance tasks..."
& git -C "$FullPath" maintenance run
if ($lastExitCode -ne "0") { throw "'git maintenance run' failed with exit code $lastExitCode" }
Write-Host "⏳ (9/10) Checking submodule status..."
& git -C "$FullPath" submodule status
if ($lastExitCode -ne "0") { throw "'git submodule status' failed with exit code $lastExitCode" }
Write-Host "⏳ (10/10) Checking repo status... " -noNewline
& git -C "$FullPath" status
if ($lastExitCode -ne "0") { throw "'git status --short' failed with exit code $lastExitCode" }
$RepoDirName = (Get-Item "$FullPath").Name
[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds
"✔️ Checked repo 📂$RepoDirName in $Elapsed sec"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-repo.ps1 as of 10/19/2023 08:11:36)*

59
docs/check-santa.md Normal file
View File

@ -0,0 +1,59 @@
*check-santa.ps1*
================
This PowerShell script checks the time until Saint Nicholas Day and replies by text-to-speech (TTS).
Parameters
----------
```powershell
PS> ./check-santa.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-santa
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the time until Saint Nicholas Day
.DESCRIPTION
This PowerShell script checks the time until Saint Nicholas Day and replies by text-to-speech (TTS).
.EXAMPLE
PS> ./check-santa
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
$Now = [DateTime]::Now
$Diff = [Datetime]("12/06/" + $Now.Year) $Now
& "$PSScriptRoot/speak-english.ps1" "Saint Nicholas Day is in $($Diff.Days) days."
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-santa.ps1 as of 10/19/2023 08:11:36)*

View File

@ -0,0 +1,98 @@
*check-smart-devices.ps1*
================
check-smart-devices.ps1
Parameters
----------
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the SMART device status
.DESCRIPTION
This PowerShell script queries the status of the SSD/HDD devices (supporting S.M.A.R.T.) and prints it.
.EXAMPLE
PS> ./check-smart-devices.ps1
✅ 1TB Samsung SSD 970 EVO via NVMe (2388 hours, 289x on, v2B2QEXE7, 37°C, selftest passed)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
function Bytes2String { param([int64]$Bytes)
if ($Bytes -lt 1000) { return "$Bytes bytes" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)KB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)MB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)GB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)TB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)PB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)EB" }
}
try {
Write-Progress "⏳ (1/3) Searching for smartmontools..."
$Result = (smartctl --version)
if ($lastExitCode -ne "0") { throw "Can't execute 'smartctl' - make sure smartmontools are installed" }
Write-Progress "⏳ (2/3) Scanning S.M.A.R.T devices..."
if ($IsLinux) {
$Devices = $(sudo smartctl --scan-open)
} else {
$Devices = $(smartctl --scan-open)
}
foreach($Device in $Devices) {
Write-Progress "⏳ (3/3) Querying S.M.A.R.T devices..."
$Array = $Device.split(" ")
$Device = $Array[0]
if ("$Device" -eq "#") {
continue
} elseif ($IsLinux) {
$Details = (sudo smartctl --all --json $Device) | ConvertFrom-Json
$null = (sudo smartctl --test=short $Device)
} else {
$Details = (smartctl --all --json $Device) | ConvertFrom-Json
$null = (smartctl --test=short $Device)
}
$ModelName = $Details.model_name
$Protocol = $Details.device.protocol
[int64]$GBytes = $Details.user_capacity.bytes
if ($GBytes -gt 0) {
$Capacity = "$(Bytes2String $GBytes) "
} else {
$Capacity = ""
}
$Temp = $Details.temperature.current
$Firmware = $Details.firmware_version
$PowerOn = $Details.power_cycle_count
$Hours = $Details.power_on_time.hours
if ($Details.smart_status.passed) { $Status = "passed" } else { $Status = "FAILED" }
Write-Progress -completed " "
Write-Host "✅ $($Capacity)$ModelName via $Protocol ($Hours hours, $($PowerOn)x on, v$($Firmware), $($Temp)°C, selftest $Status)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-smart-devices.ps1 as of 10/19/2023 08:11:36)*

72
docs/check-software.md Normal file
View File

@ -0,0 +1,72 @@
*check-software.ps1*
================
This PowerShell script queries the software status of the local computer and prints it.
Parameters
----------
```powershell
PS> ./check-software.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-software.ps1
S O F T W A R E
BIOS model 'P62 v02.67' version HPQOEM - 0 by HP
Windows 10 Pro 64-Bit (v10.0.19045, since 5/2/2021)
...
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the software
.DESCRIPTION
This PowerShell script queries the software status of the local computer and prints it.
.EXAMPLE
PS> ./check-software.ps1
S O F T W A R E
✅ BIOS model 'P62 v02.67' version HPQOEM - 0 by HP
✅ Windows 10 Pro 64-Bit (v10.0.19045, since 5/2/2021)
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
" "
& "$PSScriptRoot/write-green.ps1" " S O F T W A R E"
& "$PSScriptRoot/check-bios.ps1"
& "$PSScriptRoot/check-os.ps1"
& "$PSScriptRoot/check-uptime.ps1"
& "$PSScriptRoot/check-apps.ps1"
& "$PSScriptRoot/check-powershell.ps1"
& "$PSScriptRoot/check-time-zone.ps1"
& "$PSScriptRoot/check-swap-space.ps1"
& "$PSScriptRoot/check-pending-reboot.ps1"
exit 0 # success
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-software.ps1 as of 10/19/2023 08:11:36)*

87
docs/check-subnet-mask.md Normal file
View File

@ -0,0 +1,87 @@
*check-subnet-mask.ps1*
================
This PowerShell script checks the given subnet mask for validity.
Parameters
----------
```powershell
PS> ./check-subnet-mask.ps1 [[-address] <String>] [<CommonParameters>]
-address <String>
Specifies the subnet mask to check
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-subnet-mask.ps1 255.255.255.0
subnet mask 255.255.255.0 is valid
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the given subnet mask for validity
.DESCRIPTION
This PowerShell script checks the given subnet mask for validity.
.PARAMETER address
Specifies the subnet mask to check
.EXAMPLE
PS> ./check-subnet-mask.ps1 255.255.255.0
✔️ subnet mask 255.255.255.0 is valid
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$address = "")
function IsSubNetMaskValid { param([string]$IP)
$RegEx = "^(254|252|248|240|224|192|128).0.0.0$|^255.(254|252|248|240|224|192|128|0).0.0$|^255.255.(254|252|248|240|224|192|128|0).0$|^255.255.255.(255|254|252|248|240|224|192|128|0)$"
if ($IP -match $RegEx) {
return $true
} else {
return $false
}
}
try {
if ($address -eq "" ) { $address = read-host "Enter subnet mask to validate" }
if (IsSubNetMaskValid $address) {
"✔️ subnet mask $Address is valid"
exit 0 # success
} else {
write-warning "Invalid subnet mask: $address"
exit 1
}
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-subnet-mask.ps1 as of 10/19/2023 08:11:36)*

26
docs/check-sunrise.md Normal file
View File

@ -0,0 +1,26 @@
## check-sunrise.ps1 - Checks the time of sunrise
This script queries the time of sunrise and answers by text-to-speech (TTS).
## Parameters
```powershell
check-sunrise.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-sunrise
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-sunrise.ps1*

26
docs/check-sunset.md Normal file
View File

@ -0,0 +1,26 @@
## check-sunset.ps1 - Checks the time of sunset
This script queries the time of sunset and answers by text-to-speech (TTS).
## Parameters
```powershell
check-sunset.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-sunset
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-sunset.ps1*

108
docs/check-swap-space.md Normal file
View File

@ -0,0 +1,108 @@
*check-swap-space.ps1*
================
This PowerShell script queries the current status of the swap space and prints it.
Parameters
----------
```powershell
PS> ./check-swap-space.ps1 [[-minLevel] <Int32>] [<CommonParameters>]
-minLevel <Int32>
Specifies the minimum level in GB (10 GB by default)
Required? false
Position? 1
Default value 10
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-swap-space.ps1
Swap space uses 42%, 748MB free of 1GB
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the swap space
.DESCRIPTION
This PowerShell script queries the current status of the swap space and prints it.
.PARAMETER minLevel
Specifies the minimum level in GB (10 GB by default)
.EXAMPLE
PS> ./check-swap-space.ps1
✅ Swap space uses 42%, 748MB free of 1GB
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([int]$minLevel = 10)
function MB2String { param([int64]$Bytes)
if ($Bytes -lt 1000) { return "$($Bytes)MB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)GB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)TB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)PB" }
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)EB" }
}
try {
[int64]$Total = [int64]$Used = [int64]$Free = 0
if ($IsLinux) {
$Result = $(free --mega | grep Swap:)
[int64]$Total = $Result.subString(5,14)
[int64]$Used = $Result.substring(20,13)
[int64]$Free = $Result.substring(32,11)
} else {
$Items = Get-WmiObject -class "Win32_PageFileUsage" -namespace "root\CIMV2" -computername localhost
foreach ($Item in $Items) {
$Total += $Item.AllocatedBaseSize
$Used += $Item.CurrentUsage
$Free += ($Total - $Used)
}
}
if ($Total -eq 0) {
Write-Output "⚠️ No swap space configured"
} elseif ($Free -eq 0) {
Write-Output "⚠️ Swap space of $(MB2String $Total) is full"
} elseif ($Free -lt $minLevel) {
Write-Output "⚠️ Swap space of $(MB2String $Total) is nearly full, only $(MB2String $Free) free"
} elseif ($Used -eq 0) {
Write-Output "✅ Swap space of $(MB2String $Total) reserved"
} else {
[int]$Percent = ($Used * 100) / $Total
Write-Output "✅ Swap space uses $Percent%, $(MB2String $Free) free of $(MB2String $Total)"
}
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-swap-space.ps1 as of 10/19/2023 08:11:36)*

103
docs/check-symlinks.md Normal file
View File

@ -0,0 +1,103 @@
*check-symlinks.ps1*
================
This PowerShell script checks every symbolic link in a folder (including subfolders).
It returns the number of broken symlinks as exit value.
Parameters
----------
```powershell
PS> ./check-symlinks.ps1 [[-Folder] <String>] [<CommonParameters>]
-Folder <String>
Specifies the path to the folder
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-symlinks C:\Users
Checking symlinks at 📂C:\Users including subfolders...
Found 0 broken symlinks at 📂C:\Users in 60 sec
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks symlinks in a folder
.DESCRIPTION
This PowerShell script checks every symbolic link in a folder (including subfolders).
It returns the number of broken symlinks as exit value.
.PARAMETER folder
Specifies the path to the folder
.EXAMPLE
PS> ./check-symlinks C:\Users
⏳ Checking symlinks at 📂C:\Users including subfolders...
✔️ Found 0 broken symlinks at 📂C:\Users in 60 sec
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$Folder = "")
try {
if ($Folder -eq "" ) { $Folder = read-host "Enter the path to the folder" }
$StopWatch = [system.diagnostics.stopwatch]::startNew()
$FullPath = Resolve-Path "$Folder"
"⏳ Checking symlinks at 📂$FullPath including subfolders..."
[int]$NumTotal = [int]$NumBroken = 0
Get-ChildItem $FullPath -recurse | Where { $_.Attributes -match "ReparsePoint" } | ForEach-Object {
$Symlink = $_.FullName
$Target = ($_ | Select-Object -ExpandProperty Target -ErrorAction Ignore)
if ($Target) {
$path = $_.FullName + "\..\" + ($_ | Select-Object -ExpandProperty Target)
$item = Get-Item $path -ErrorAction Ignore
if (!$item) {
$NumBroken++
"Symlink $Symlink to: $Target seems broken (#$NumBroken)"
}
}
$NumTotal++
}
[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds
if ($NumTotal -eq 0) {
"✔️ No symlink found at 📂$FullPath in $Elapsed sec"
} elseif ($NumBroken -eq 1) {
"✔️ Found $NumBroken broken symlink at 📂$FullPath in $Elapsed sec"
} else {
"✔️ Found $NumBroken broken symlinks at 📂$FullPath in $Elapsed sec"
}
exit $NumBroken
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-symlinks.ps1 as of 10/19/2023 08:11:36)*

13
docs/check-tea-time.md Normal file
View File

@ -0,0 +1,13 @@
## check-tea-time.ps1 - check-tea-time.ps1
## Parameters
```powershell
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
*Generated by convert-ps2md.ps1 using the comment-based help of check-tea-time.ps1*

26
docs/check-tether-rate.md Normal file
View File

@ -0,0 +1,26 @@
## check-tether-rate.ps1 - Checks the Tether rate
This script queries the current Tether exchange rates and answers by text-to-speech (TTS).
## Parameters
```powershell
check-tether-rate.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-tether-rate
```
## Notes
Author: Markus Fleschutz · License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-tether-rate.ps1*

68
docs/check-time-zone.md Normal file
View File

@ -0,0 +1,68 @@
*check-time-zone.ps1*
================
This PowerShell script queries the time zone and prints it.
Parameters
----------
```powershell
PS> ./check-time-zone.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
Example
-------
```powershell
PS> ./check-time-zone.ps1
11:13 AM W. Europe Summer Time (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna (+01:00 DST)
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Checks the time zone
.DESCRIPTION
This PowerShell script queries the time zone and prints it.
.EXAMPLE
PS> ./check-time-zone.ps1
✅ 11:13 AM W. Europe Summer Time (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna (+01:00 DST)
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
try {
[system.threading.thread]::currentThread.currentCulture = [system.globalization.cultureInfo]"en-US"
$Time = $((Get-Date).ToShortTimeString())
$TZ = (Get-Timezone)
if ($TZ.SupportsDaylightSavingTime) {
$TZName = $TZ.DaylightName
$DST=" (+01:00 DST)"
} else {
$TZName = $TZ.StandardName
$DST=""
}
Write-Host "✅ $Time $TZName $($TZ.DisplayName)$($DST)"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of check-time-zone.ps1 as of 10/19/2023 08:11:36)*

26
docs/check-time.md Normal file
View File

@ -0,0 +1,26 @@
## check-time.ps1 - Determines the current time
This PowerShell script determines and speaks the current time by text-to-speech (TTS).
## Parameters
```powershell
check-time.ps1 [<CommonParameters>]
[<CommonParameters>]
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```
## Example
```powershell
PS> ./check-time
```
## Notes
Author: Markus Fleschutz / License: CC0
## Related Links
https://github.com/fleschutz/PowerShell
*Generated by convert-ps2md.ps1 using the comment-based help of check-time.ps1*

Some files were not shown because too many files have changed in this diff Show More