PowerShell/Docs/FAQ.md

162 lines
8.6 KiB
Markdown
Raw Normal View History

2023-08-23 08:03:57 +02:00
![](powershell_black_icon_64x64.png) PowerShell FAQ
===================================================
2021-02-11 07:20:18 +01:00
2023-05-10 13:01:44 +02:00
<details><summary>What is PowerShell?</summary>
2023-05-11 11:08:01 +02:00
2023-05-11 11:07:41 +02:00
**PowerShell is a task automation and configuration management framework from Microsoft, consisting of a command-line shell and associated scripting language.**
2023-05-11 11:08:01 +02:00
2023-05-10 12:58:03 +02:00
</details>
2021-02-11 07:20:18 +01:00
2023-05-10 13:01:44 +02:00
<details><summary>Why use PowerShell?</summary>
2023-05-10 13:00:28 +02:00
2023-05-11 10:49:34 +02:00
✔️ **It's powerful** - fully control your computer
2022-09-16 09:20:34 +02:00
2023-05-11 10:49:34 +02:00
✔️ **It's easy to learn** - see the tutorial at: https://www.guru99.com/powershell-tutorial.html
2022-09-16 09:20:34 +02:00
2023-05-11 10:49:34 +02:00
✔️ **It's cross-platform** - available for Linux, Mac OS and Windows
2022-09-16 09:20:34 +02:00
2023-05-11 10:49:34 +02:00
✔️ **It's open-source and free** - see the Github repository at: https://github.com/PowerShell/PowerShell
2022-09-16 09:20:34 +02:00
2023-05-11 10:49:34 +02:00
✔️ **It's fully documented** - see the PowerShell documentation at: https://docs.microsoft.com/en-us/powershell/
2023-05-10 12:59:02 +02:00
</details>
2021-12-22 15:54:05 +01:00
2023-08-09 16:11:18 +02:00
<details><summary>How to install PowerShell on Linux?</summary>
2023-08-23 08:18:42 +02:00
1. **On Linux with Snap support just execute:**
2023-08-09 16:11:18 +02:00
```
$ snap install PowerShell
$ ln -s /snap/bin/pwsh /usr/bin/pwsh
```
2023-08-23 08:18:42 +02:00
2 **Otherwise visit:** https://github.com/PowerShell/PowerShell for installation (scroll down to 'Get PowerShell').
2023-08-09 16:11:18 +02:00
</details>
<details><summary>How to install PowerShell on MacOS?</summary>
2023-05-10 13:00:28 +02:00
2023-08-23 08:17:21 +02:00
**Please visit:** https://github.com/PowerShell/PowerShell for installation (scroll down to 'Get PowerShell').
2023-08-09 16:11:18 +02:00
</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 (Administrator)* console and enter:
2022-12-29 20:47:33 +01:00
```
PS> Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
```
2022-12-29 21:02:05 +01:00
NOTE: the group policy object (GPO) settings of your organization might disallow changes. In that case contact your system administrator for help.
2023-05-10 13:00:28 +02:00
</details>
2021-02-11 07:39:51 +01:00
2023-08-09 16:16:08 +02:00
<details><summary>How to get this PowerShell script collection?</summary>
2023-05-10 13:01:44 +02:00
2023-08-09 16:18:39 +02:00
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
2023-05-10 13:00:28 +02:00
</details>
2021-06-30 19:43:40 +02:00
2023-08-09 16:20:35 +02:00
<details><summary>How to execute PowerShell scripts on Windows?</summary>
2023-05-10 14:08:50 +02:00
2022-09-19 15:27:27 +02:00
1. In the Windows desktop: right-click the script and select: *Execute with PowerShell*
2022-10-28 08:23:44 +02:00
2. In a command-line interface (CLI, e.g. *Windows Terminal*, either local or remote via SSH) by typing: `./<FILENAME_OF_SCRIPT>`.
2022-09-16 09:12:31 +02:00
3. By connecting a context menu item with a script.
4. By voice control, e.g. see repo [talk2windows](https://github.com/fleschutz/talk2windows) for more information.
5. By using automation software, e.g. [Jenkins](https://www.jenkins.io).
2023-05-10 14:08:50 +02:00
</details>
2023-05-10 14:21:58 +02:00
2023-05-10 14:24:16 +02:00
<details><summary>How to execute PowerShell scripts in Windows context menus?</summary>
2023-08-09 16:30:15 +02:00
* 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)
2023-05-10 14:24:16 +02:00
</details>
2023-08-09 16:30:15 +02:00
<details><summary>How to execute PowerShell scripts automatically on login in Windows?</summary>
2023-08-09 16:54:55 +02:00
1. Open the **File Explorer** with your **Autostart folder** (usually at: C:\Users\YOUR_USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup).
2023-08-09 16:30:15 +02:00
2. Copy the script (or a link to it) into this folder.
</details>
2023-05-10 14:24:16 +02:00
2023-05-11 11:12:22 +02:00
<details><summary>How to execute PowerShell scripts in Jenkins?</summary>
2023-08-09 17:00:10 +02:00
1. Install the Jenkins plugin **PowerShell plugin** (it uses PowerShell.exe on Windows and pwsh on Linux).
2023-08-09 16:59:34 +02:00
2. Add or reference your PowerShell scripts in the Jenkins jobs or in your Jenkinsfiles.
2023-05-11 11:12:22 +02:00
</details>
2022-09-16 09:12:31 +02:00
2023-08-17 08:21:43 +02:00
<details><summary>How to learn PowerShell?</summary>
2023-08-23 08:17:21 +02:00
* **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/
2023-08-17 08:21:43 +02:00
</details>
<details><summary>What about security?</summary>
2022-09-16 09:12:31 +02:00
2023-08-09 16:22:15 +02:00
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
2023-05-10 14:08:50 +02:00
</details>
2022-08-30 09:24:51 +02:00
2023-05-11 11:12:22 +02:00
<details><summary>Why do some scripts show gibberish characters?</summary>
2023-05-10 14:14:57 +02:00
2023-05-11 11:23:33 +02:00
**Your current terminal application doesn't support Unicode characters used by those PowerShell scripts. Use a modern one such as *Windows Terminal*, please.**
2023-05-11 11:12:22 +02:00
</details>
2021-03-29 11:33:47 +02:00
2023-05-11 11:15:39 +02:00
<details><summary>How to configure PowerShell as my default shell on Linux?</summary>
2023-05-10 14:14:57 +02:00
2023-05-11 11:12:22 +02:00
**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>
2021-02-11 07:20:18 +01:00
2023-05-11 11:12:22 +02:00
<details><summary>How to install a custom PowerShell profile?</summary>
2023-05-10 14:14:57 +02:00
2023-05-11 11:12:22 +02:00
**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>
2023-04-21 20:18:23 +02:00
2023-05-10 14:14:57 +02:00
<details><summary>How to add the scripts to the search path?</summary>
2023-05-10 14:12:49 +02:00
2021-02-11 07:20:18 +01:00
Want to use the PowerShell scripts everywhere on the command-line? Then you need to add the Scripts/ subfolder to the search path:
2021-03-29 11:52:30 +02:00
* **On Linux using Bash:** edit .profile in your home directory and add the line: PATH="$PATH:/path/to/PowerShell/Scripts"
2022-08-29 12:42:59 +02:00
* **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.
2023-05-10 14:12:49 +02:00
</details>
2021-02-11 07:20:18 +01:00
2023-05-11 11:02:05 +02:00
<details><summary>Which editor to use for PowerShell scripts?</summary>
2023-05-10 14:12:49 +02:00
2023-05-11 11:06:42 +02:00
* **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.
2022-05-06 09:05:47 +02:00
* or your **favorite text editor** as an alternative.
2023-05-11 11:02:05 +02:00
</details>
2021-04-16 16:43:41 +02:00
2023-05-11 11:02:05 +02:00
<details><summary>How to write good PowerShell scripts?</summary>
2023-05-11 11:16:33 +02:00
**Good PowerShell scripts are both user-friendly and platform-independent. As a starting point I recommend the following:**
2023-05-11 11:02:05 +02:00
2023-08-23 08:21:54 +02:00
* As filename use the `<verb>-<object>.ps1` scheme. 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)
2023-08-23 08:17:21 +02:00
* 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)
2023-05-11 11:02:05 +02:00
</details>
2021-02-11 07:20:18 +01:00
2023-05-11 11:02:05 +02:00
<details><summary>Where's the Star History of this repo?</summary>
2023-05-10 14:14:57 +02:00
2023-04-18 15:41:40 +02:00
[![Star History Chart](https://api.star-history.com/svg?repos=fleschutz/PowerShell&type=Date)](https://star-history.com/#fleschutz/PowerShell&Date)
2023-05-11 11:02:05 +02:00
</details>
2023-04-18 15:41:40 +02:00
2023-05-11 11:02:05 +02:00
<details><summary>How to contribute or how to report a bug?</summary>
2023-04-18 15:41:40 +02:00
2023-05-11 11:10:24 +02:00
**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.**
2023-05-11 11:02:05 +02:00
</details>
2021-08-30 09:19:10 +02:00
2023-08-04 12:22:37 +02:00
<details><summary>How to donate to this project?</summary>
2023-08-04 12:21:42 +02:00
2023-08-23 08:25:47 +02:00
**Thanks a lot! Just follow this link:** [https://www.paypal.com/paypalme/Fleschutz](https://www.paypal.com/paypalme/Fleschutz)
2023-08-04 12:22:37 +02:00
</details>
2023-08-04 12:21:42 +02:00
2023-05-11 11:10:24 +02:00
<details><summary>What if my question is not answered here?</summary>
2023-08-23 08:23:44 +02:00
**Just send your question by e-mail to:** `markus.fleschutz [at] gmail.com`
2023-05-11 11:10:24 +02:00
</details>