---
tags:
  - powershell
  - scripting
  - programming
  - vocabulary
  - definitions
  - pwsh7
---

# PowerShell Scripting Concepts and Vocabulary

This guide defines the core vocabulary and concepts required for effective scripting and programming in PowerShell 7+ (Core). Unlike traditional shell scripting which manipulates text, PowerShell is built on .NET and manipulates **objects**.

## Core Execution Units

### Cmdlet (Command-let)
A lightweight command used in the PowerShell environment. The PowerShell runtime invokes these in the context of automation scripts.
- **Structure:** Always follows a `Verb-Noun` naming convention (e.g., `Get-Process`, `New-Item`).
- **Origin:** Typically compiled .NET classes (C#).

### Function
A named block of PowerShell code that performs a specific task. Functions behave similarly to cmdlets but are written in the PowerShell language rather than compiled languages.
- **Advanced Functions:** Functions that use the `[CmdletBinding()]` attribute to access common parameters (like `-Verbose` or `-WhatIf`) and pipeline input.

### ScriptBlock
A collection of statements enclosed in braces `{ ... }`. It is essentially an anonymous function or lambda expression.
- **Usage:** Used heavily in pipeline operations (e.g., `Where-Object { $_.Name -eq 'svchost' }`) or passed as parameters.

### Alias
An alternate name or nickname for a cmdlet or function (e.g., `ls` for `Get-ChildItem`, `gc` for `Get-Content`).
- *Best Practice:* Avoid using aliases in saved scripts for readability and maintainability.

## Data & Objects

### Object
PowerShell is object-oriented. An object is a discrete entity that contains data (Properties) and instructions (Methods). When you run `Get-Process`, you don't get text; you get instances of `System.Diagnostics.Process`.

### Member
Refers to the properties, methods, and events associated with an object.
- **Discovery:** Use `Get-Member` (alias `gm`) to inspect the type and members of an object.

### Property
Data stored within an object (e.g., a Process object has an `Id` property and a `Name` property).

### Method
Actions that can be performed on or by an object (e.g., a Process object has a `.Kill()` method).

### PSCustomObject
A generic object type used to create structured data on the fly.
```powershell
$obj = [PSCustomObject]@{
    Name = "Server01"
    IP   = "192.168.1.10"
}
```

## The Pipeline

### Pipeline (`|`)
The mechanism used to pass the **output** object of one command as the **input** object of the next command.
- **ByValue:** Matches the incoming object type to the parameter type.
- **ByPropertyName:** Matches a property name on the incoming object to a parameter name on the receiving command.

## Language Elements

### Variable
A unit of memory used to store values. In PowerShell, variables are denoted by the `$` prefix (e.g., `$MyVar`).
- **Typing:** PowerShell is dynamically typed but allows for strong typing (e.g., `[int]$Number = 5`).

### Scope
Determines the visibility and accessibility of variables and functions.
- **Global:** Available everywhere in the current session.
- **Script:** Available anywhere within the script file.
- **Local:** Available only in the current block (function or loop).
- **Private:** Not visible to child scopes.

### Splatting
A method of passing a collection of parameter values to a command as a unit (usually a Hashtable). This improves readability.
```powershell
$params = @{
    Path = "C:\Temp"
    Recurse = $true
    Force = $true
}
Get-ChildItem @params
```

## Data Structures

### Array (`@()`)
A collection of items. PowerShell arrays are zero-indexed.
```powershell
$arr = @(1, 2, 3)
```

### Hash Table (`@{}`)
A dictionary collection of key-value pairs.
```powershell
$hash = @{ Key1 = "Value1"; Key2 = "Value2" }
```

## Modularization

### Module
A package that contains PowerShell members, such as cmdlets, providers, functions, variables, and aliases.
- **.psm1:** The script module file containing the code.
- **.psd1:** The module manifest file containing metadata (version, author, exported commands).

### Dot Sourcing (`. .\Script.ps1`)
Running a script in the *current* scope rather than a child scope. This allows the script to modify variables or define functions that persist in your current session after the script finishes.

## Environment

### PSProvider
An adapter that makes data stores look like file system drives.
- **Examples:** Registry, Certificate Store, Environment Variables, FileSystem.