Data | ||
Misc | ||
Scripts | ||
LICENSE | ||
README.md |
Collection of Useful PowerShell Scripts
This repository contains 100+ useful and cross-platform PowerShell scripts - to be used by command-line interface (CLI), for remote control (RC), by context menu, by voice control, by automation software (e.g. Jenkins), or simply to learn PowerShell.
List of Scripts
The following PowerShell scripts can be found in the Scripts/ subfolder:
- check-ipv4-address.ps1 - checks the given IPv4 address for validity
- check-mac-address.ps1 - checks the given MAC address for validity
- check-xml-file.ps1 - checks the given XML file for validity
- clone-repos.ps1 - clones well-known Git repositories
- close-calculator.ps1 - closes the calculator program gracefully
- close-chrome.ps1 - closes Google Chrome gracefully
- close-edge.ps1 - closes Microsoft Edge gracefully
- close-file-explorer.ps1 - closes Microsoft File Explorer gracefully
- close-program.ps1 - closes the given program gracefully
- close-thunderbird.ps1 - closes Mozilla Thunderbird gracefully
- close-windows-terminal.ps1 - closes Windows Terminal gracefully
- configure-git.ps1 - sets up the Git configuration
- csv-to-text.ps1 - converts the given CSV file into a text list
- decrypt-file.ps1 - encrypts the given file
- display-time.ps1 - displays the current time for 10 seconds by default
- download.ps1 - downloads the file/directory from the given URL
- empty-dir.ps1 - empties the given directory
- enable-crash-dumps.ps1 - enables the writing of crash dumps
- encrypt-file.ps1 - encrypts the given file
- generate-qrcode.ps1 - generates a QR code
- inspect-exe.ps1 - prints basic information of the given executable file
- list-anagrams.ps1 - lists all anagrams of the given word
- list-automatic-variables.ps1 - lists PowerShell automatic variables
- list-empty-dirs.ps1 - lists empty subfolders in a directory tree
- list-installed-software.ps1 - lists the installed software
- list-files.ps1 - lists all files in the given folder and also in every subfolder
- list-formatted.ps1 - lists the current working directory formatted in columns
- list-fritzbox-calls.ps1 - lists the FRITZ!Box calls
- list-fritzbox-devices.ps1 - lists FRITZ!Box's known devices
- list-logbook.ps1 - lists the content of the logbook
- list-unused-files.ps1 - lists unused files in a directory tree
- list-cmdlets.ps1 - lists the PowerShell cmdlets
- list-earthquakes.ps1 - lists earthquakes with magnitude >= 6.0 for the last 30 days
- list-modules.ps1 - lists the PowerShell modules
- list-news.ps1 - lists the latest news
- list-os-releases.ps1 - lists OS releases and download URL
- list-printers.ps1 - lists all printer known to the computer
- list-processes.ps1 - lists the local computer processes
- list-random-passwords.ps1 - prints a list of random passwords
- list-random-pins.ps1 - prints a list of random PIN's
- list-scripts.ps1 - lists the PowerShell scripts in this repository
- locate-city.ps1 - prints the geographic location of the given city
- locate-ipaddress.ps1 - prints the geographic location of the given IP address
- locate-zip-code.ps1 - prints the geographic location of the given zip-code
- MD5.ps1 - prints the MD5 checksum of the given file
- make-install.ps1 - installs built executables and libs to the installation directory
- moon.ps1 - prints the current moon phase
- mute-audio.ps1 - mutes audio
- open-browser.ps1 - starts the default Web browser
- open-calculator.ps1 - starts the calculator program
- open-email-client.ps1 - starts the default email client
- play-beep.ps1 - plays a beep sound
- poweroff.ps1 - halts the local computer (needs administrator rights)
- new-email.ps1 - starts the default email client to write a new email
- reboot.ps1 - reboots the local computer (needs administrator rights)
- reboot-fritzbox.ps1 - reboots the FRITZ!box device
- search-files.ps1 - searches the given pattern in the given files
- scan-ports.ps1 - scans the network for open/closed ports
- send-email.ps1 - sends an email message
- send-tcp.ps1 - sends a TCP message to the given IP address and port
- send-udp.ps1 - sends a UDP datagram message to the given IP address and port
- set-timer.ps1 - sets a timer for a countdown
- SHA1.ps1 - prints the SHA1 checksum of the given file
- SHA256.ps1 - prints the SHA256 checksum of the given file
- simulate-matrix.ps1 - simulates the Matrix (fun)
- simulate-presence.ps1 - simulates the human presence against burglars
- speak-date.ps1 - speaks the current date by text-to-speech (TTS)
- speak-file.ps1 - speaks the content of the given text file by text-to-speech (TTS)
- speak-test.ps1 - performs a speak test by text-to-speech (TTS)
- speak-text.ps1 - speaks the given text by text-to-speech (TTS)
- speak-time.ps1 - speaks the current time by text-to-speech (TTS)
- switch-shelly1.ps1 - switches a Shelly1 device in the local network
- take-screenshot.ps1 - takes a single screenshot
- take-screenshots.ps1 - takes multiple screenshots
- train-dns-cache.ps1 - trains the DNS cache with frequently used domain names
- translate-file.ps1 - translates the given file from source to target language
- translate-text.ps1 - translates the given text into other languages
- turn-volume-up.ps1 - turns the audio volume up (+10% by default)
- turn-volume-down.ps1 - turns the audio volume down (-10% by default)
- txt2wav.ps1 - converts text into a audio .WAV file
- unmute-audio.ps1 - unmutes audio
- voice-control.ps1 - executes the PowerShell scripts by voice
- weather.ps1 - prints the current weather forecast
- weather-alert.ps1 - checks the current weather for critical values
- weather-report.ps1 - prints the local weather report
- weather-worldwide.ps1 - prints the current weather of cities worldwide
- wakeup.ps1 - sends a magic packet to the given computer, waking him up
- write-big.ps1 - writes the given text in big letters
- write-blue.ps1 - writes the given text in a blue foreground color
- write-braille.ps1 - writes the given text in Braille
- write-green.ps1 - writes the given text in a green foreground color
- write-logbook.ps1 - writes the given text to the logbook
- write-marquee.ps1 - writes the given text as marquee
- write-morse-code.ps1 - writes the given text in Morse code
- write-motd.ps1 - writes the message of the day (MOTD)
- write-red.ps1 - writes the given text in a red foreground color
- write-rot13.ps1 - encodes or decodes the given text with ROT13
- write-typewriter.ps1 - writes the given text with the typewriter effect
- write-uppercase.ps1 - writes the given text in uppercase letters
- write-vertical.ps1 - writes the given text in vertical direction
- zip-dir.ps1 - creates a zip archive of the given folder
What is PowerShell?
PowerShell is a task automation and configuration management framework from Microsoft, consisting of a command-line shell and associated scripting language.
- it's powerful: fully control your computer
- it's cross-platform: available for Linux, Mac OS and Windows
- it's open-source: see the Github repository at https://github.com/PowerShell/PowerShell
- it's easy to learn: see the tutorial at https://www.guru99.com/powershell-tutorial.html
- it's fully documented: see the official docs at https://docs.microsoft.com/en-us/powershell/
How to get PowerShell?
- Windows 7 and newer do provide PowerShell by default. It's recommended to install Windows Terminal (see the Microsoft Store at https://www.aka.ms/terminal) for a comfortable command-line usage. Per default, Windows does not allow script execution (execution policy "restricted"). To enable this, enter as administrator:
$ Set-ExecutionPolicy RemoteSigned
- On CentOS, Debian, Docker, Fedora, macOS, openSUSE, Red Hat, Ubuntu visit https://github.com/PowerShell/PowerShell for installation.
Afterward, install this collection by clicking on the green "Code" button or execute:
$ git clone https://github.com/fleschutz/PowerShell
Configure PowerShell as Default Shell
- Linux: make sure PowerShell is installed, then execute:
chsh -s /snap/bin/powershell <username>
- Windows: no need to, PowerShell is the default shell
Adding the Scripts to the Search Path
Want to use the PowerShell scripts everywhere on the command-line? Then you need to add the Scripts/ subfolder to the search path:
- Bash or sh: edit .profile in your home directory and add the line: PATH="$PATH:/path/to/PowerShell/Scripts"
- Windows: open the environment variables dialogue and add the full path to Scripts/ to the system environment variable "Path"
Using PowerShell in Context Menus
- to enable "right-click > New > Windows PowerShell Script" execute
Add_ps1_to_New_context_menu.reg
in subfolder Misc/ - to disable this execute
Remove_ps1_from_New_context_menu.reg
in subfolder Misc/
Script Conventions
Each PowerShell script should follow the 9 golden rules:
- Rule #1: the filename should be named
<verb>-<object>.ps1
- Rule #2: the first line reads
#!/snap/bin/powershell
to support PowerShell on Linux - Rule #3: the script has execute file permissions (chmod a+rx ) to support PowerShell on Linux
- Rule #4: provide a comment-based help with syntax, description, link, author, and license
- Rule #5: prefer command-line options, else ask the user
- Rule #6: the encoding of the script is in UTF-8 with BOM to support Unicode characters
- Rule #7: use
Set-StrictMode -Version Latest
to enable additional error checking - Rule #8: for readibility use UpperCamelCase for variables and functions, lowerCamelCase for everything else
- Rule #9: exits 0 for success, else print an error message and exit with the error code (mostly 1)
Feedback
Send your email feedback to: markus [at] fleschutz [dot] de
License & Copyright
This open source release is licensed under the CC0 license. All trademarks are the property of their respective owners.