Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

In PowerShell, “pointers” usually means useful shortcuts and ways to find commands—not C-style memory pointers. The most useful starting points are Get-Alias, Get-Command, and Get-Help. This guide updates the spirit of ITPro Today’s 2007 “PowerShell Pointers” article for modern PowerShell, while separating aliases, variable scope, [ref], and native pointers.

What “pointers” means in PowerShell

“Pointer” is not an official PowerShell language category. In the original 2007 article, it meant handy pointers into the shell: aliases, help, command discovery, loops, operators, execution policy, and WMI guidance. In current usage, it helps to distinguish three different ideas:

  • Aliases are alternate command names, such as % for ForEach-Object.
  • Variables and scope describe named values and where those values can be accessed or changed.
  • [ref] and native pointers are more specialized: [ref] supports by-reference parameter passing, while unmanaged memory pointers belong to interop work, not ordinary PowerShell scripting.

The examples below use standard PowerShell syntax. PowerShell 7 runs on Windows, macOS, and Linux, but the commands and modules available to manage a particular system can be platform-specific. Windows PowerShell 5.1 and PowerShell 7 also do not have identical module and help coverage. Check the edition and version with $PSVersionTable.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Aliases: handy shortcuts, not memory addresses

An alias is another name for a command. It can make an interactive session quicker, but it does not hold a command together with a fixed set of arguments, and it is not a variable or memory address. Aliases can target different kinds of commands, not only cmdlets.

#1 Best Overall
SYNERLOGIC Mac OS (M/Intel) + Word/Excel (for Mac) Quick Reference Keyboard Shortcut Stickers - for MacBook Air/Pro/iMac/Mac/mini (Black)
  • 💻 ✔️ EVERY ESSENTIAL SHORTCUT - With the SYNERLOGIC Mac OS Reference Keyboard Shortcut Sticker, you have the most important shortcuts conveniently placed right in front of you. Easily learn new shortcuts and always be able to quickly lookup commands without the need to “Google” it.
  • 💻 ✔️ Work FASTER and SMARTER - Quick tips at your fingertips! This tool makes it easy to learn how to use your computer much faster and makes your workflow increase exponentially. It’s perfect for any age or skill level, students or seniors, at home, or in the office.
  • 💻 ✔️ New adhesive – stronger hold. It may leave a light residue when removed, but this wipes off easily with a soft cloth and warm, soapy water. Fewer air bubbles – for the smoothest finish, don’t peel off the entire backing at once. Instead, fold back a small section, line it up, and press gradually as you peel more. The “peel-and-stick-all-at-once” method only works for thin decals, not for stickers like ours.
  • 💻 ❌ Not for MacBook Neo or 11", 12" macbooks (see our "universal" version - it is smaller). Fit is perfect for any MacBooks Air and Pro, iMacs, and Mac Minis—regardless of CPU type or macOS version.
  • 💻 Made in the USA – Trusted Quality – Designed, printed, and packaged in the USA. Backed by responsive customer support and a satisfaction guarantee.
Get-Alias
Get-Alias %
Get-Alias gci
Get-Alias -Definition ForEach-Object

Get-Alias lists aliases in the current session. The other examples inspect a particular alias or find aliases for a named command. Common aliases include % for ForEach-Object, ? for Where-Object, and gci for Get-ChildItem. Names such as ls and dir often resolve to Get-ChildItem in Windows-oriented environments, but aliases can vary with edition, modules, profiles, and user customization. Verify rather than assume:

Get-Alias gci | Format-List *

You can create, replace, and remove a session alias:

Set-Alias -Name ll -Value Get-ChildItem
ll -Force

New-Alias -Name ll -Value Get-ChildItem
Remove-Item Alias:ll

Set-Alias creates or changes the alias; New-Alias creates one and reports an error if that name already exists. The demonstration runs Get-ChildItem -Force. An alias normally lasts only for the current session. To make a personal alias available in future sessions, inspect the profile path and whether the file exists:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
$PROFILE
Test-Path $PROFILE

If needed, create the profile directory and file, then put the alias command in the profile:

New-Item -ItemType Directory -Force -Path (Split-Path $PROFILE)
New-Item -ItemType File -Force -Path $PROFILE

# Add to the profile:
Set-Alias -Name ll -Value Get-ChildItem

A profile is executable code, so only add commands you understand and trust. An alias created inside a function may also disappear when that function’s local scope ends. For a deliberate current-session global alias, Set-Alias -Scope Global -Name ll -Value Get-ChildItem is available, but global state can make scripts harder to test and maintain.

Use aliases for personal, interactive shorthand. In shared scripts, documentation, and production automation, prefer full command names so the code is readable and does not depend on somebody’s profile:

Rank #2
Synerlogic Word/Excel Windows Shortcut Sticker | Reference Guide Keyboard Shortcuts | Work from Home Essentials | Excel Shortcuts Cheat Sheet Laminated Vinyl (Clear/Small)
  • 💻 ✔️ EVERY ESSENTIAL SHORTCUT - With the SYNERLOGIC Reference Keyboard Shortcut Sticker, you have the most important shortcuts conveniently placed right in front of you. Easily learn new shortcuts and always be able to quickly lookup commands without the need to “Google” it.
  • 💻✔️ Work FASTER and SMARTER - Quick tips at your fingertips! This tool makes it easy to learn how to use your computer much faster and makes your workflow increase exponentially. It’s perfect for any age or skill level, students or seniors, at home, or in the office.
  • 💻 ✔️ New adhesive – stronger hold. It may leave a light residue when removed, but this wipes off easily with a soft cloth and warm, soapy water. Fewer air bubbles – for the smoothest finish, don’t peel off the entire backing at once. Instead, fold back a small section, line it up, and press gradually as you peel more. The “peel-and-stick-all-at-once” method only works for thin decals, not for stickers like ours.
  • 💻 ✔️ Compatible and fits any brand laptop or desktop running Windows 10 or 11 Operating System.
  • 💻 ✔️ Original Design and Production by Synerlogic Electronics, San Diego, CA, Boca Raton, FL and Bay City, MI, United States 2020. All rights reserved, any commercial reproduction without permission is punishable by all applicable laws.
Get-ChildItem -Force

Find commands with Get-Command

If you know part of a command’s name, search with wildcards. To narrow the results, search by command type, verb, or noun:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Get-Command *service*
Get-Command *event*
Get-Command -CommandType Cmdlet
Get-Command -CommandType Function
Get-Command -CommandType Alias
Get-Command -CommandType Application
Get-Command -Verb Get
Get-Command -Noun Process

PowerShell command names commonly follow a verb-noun pattern, such as Get-Service. Using approved verbs and descriptive nouns makes commands easier to search and gives custom functions a familiar shape. To inspect a result and its syntax, try:

Get-Command Get-Service
Get-Command Get-Service -Syntax
Get-Command Get-Service -ShowCommandInfo

Get-Command also resolves aliases, so it is useful when you want to see what a short name reaches. If a command is missing, check whether the relevant module is installed or imported, whether the command exists in your PowerShell edition, and whether the spelling is correct. An external application and a PowerShell cmdlet can have similar names, so inspect the command type when resolution is surprising.

Get answers from PowerShell help

Get-Help covers both commands and conceptual topics. Start with the short help, then ask for the kind of detail you need:

Get-Help Get-Service
Get-Help Get-Service -Examples
Get-Help Get-Service -Detailed
Get-Help Get-Service -Full
Get-Help Get-Service -Online

Use conceptual help for language and shell behavior:

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Get-Help about_Aliases
Get-Help about_Operators
Get-Help about_Scopes
Get-Help about_Ref
Get-Help about_Profiles
Get-Help about_Execution_Policies

On some installations, help content is absent or out of date. You can try:

Update-Help

Updating help may require elevation for some modules, and downloads can fail if the system is offline or network policy blocks access. Help content can differ between Windows PowerShell 5.1 and PowerShell 7. The -Online switch depends on the command’s help metadata pointing to an available page; it is not guaranteed for every command.

ForEach-Object and foreach do different jobs

The alias % refers to the pipeline cmdlet ForEach-Object. It runs a script block for each object arriving through the pipeline:

Get-Process | ForEach-Object {
    $_.ProcessName
}

For a quick interactive command, the alias works too:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Get-Process | % { $_.ProcessName }

The language-level foreach statement instead iterates over a collection available to the statement:

$processes = Get-Process

foreach ($process in $processes) {
    $process.ProcessName
}

Use ForEach-Object when pipeline processing fits the task, especially when working through incoming pipeline objects. Use foreach when you already have a collection and a clear multi-line loop reads better. Neither is a pointer mechanism. In scripts, the full name ForEach-Object is usually easier for other people to understand than %.

Useful operators to look up

PowerShell operators let you compare values, match patterns, test membership, and combine conditions. A few examples:

$name -eq 'pwsh'
$name -like '*server*'
$processes | Where-Object CPU -gt 100
  • Comparison: -eq, -ne, -gt, -ge, -lt, -le
  • Pattern: -like, -notlike, -match, -notmatch
  • Collection membership: -in, -notin, -contains, -notcontains
  • Other common groups: -replace; logical -and, -or, -not; type tests -is, -isnot
  • Pipeline and redirection: |, >, >>, and Tee-Object

Operator behavior and syntax have details worth checking rather than guessing. For the full reference, use Get-Help about_Operators.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Variables, scope, and why changes may not stick

A variable is a named entry in PowerShell session state, written with a $ prefix. It can hold values, objects, collections, script blocks, and other data. It is not ordinarily exposed as a C-style address. Scope determines where variables, aliases, functions, and drives can be accessed and changed.

$value = 'parent'

function Test-Scope {
    $value = 'child'
    $value
}

Test-Scope
$value

The function outputs child; the final $value is still parent. The function’s assignment is local rather than an automatic overwrite of the caller’s variable. Scope modifiers such as $script:Status and $global:SharedValue let you target a wider scope deliberately:

$script:Status = 'Ready'
$global:SharedValue = 42

Other documented scope modifiers include Local:, Private:, and Using: for particular remoting and job scenarios. Avoid reaching for global state just to make a value or alias persist: it can create hidden dependencies. For a durable personal shortcut, a profile is generally more appropriate; for reusable automation, use a function or module. See Microsoft’s scope reference.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Is [ref] a pointer?

No—not in the native-memory sense. PowerShell’s [ref] type accelerator wraps a variable for by-reference parameter passing; the wrapped value is accessed through .Value:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
function Set-Value {
    param(
        [ref]$Target
    )

    $Target.Value = 'changed'
}

$text = 'original'
Set-Value ([ref]$text)
$text

The final value is changed. A common mistake is to assign to the reference parameter itself instead of its .Value. The caller also needs to pass a variable with [ref], not an arbitrary expression. By-reference parameters are useful for some .NET APIs and deliberate cases where a caller’s variable must be changed. For ordinary PowerShell functions, returning an object through the pipeline is usually clearer:

Best Value
Synerlogic (Universal/Neo/Air/Pro) Mac OS Reference Keyboard Shortcut Sticker, Laminated Vinyl - for MacBook/iMac/Mini (Clear-White)
  • ✅ Fit is perfect for any MacBooks: Neo, Air and Pro, iMacs, and Mac Minis—regardless of CPU type or macOS version.
  • 💻 Master Mac Shortcuts Instantly – Learn and use essential Mac commands without searching online. This sticker keeps the most important keyboard shortcuts visible on your device, making it easy to boost your skills and speed up everyday tasks. ⚠️ Note: The “⇧” symbol stands for the Shift key.
  • 💻 Perfect for Beginners and Power Users – Whether you're new to Mac or a seasoned user, this tool helps you work faster, learn smarter, and avoid frustration. Ideal for students, professionals, creatives, and seniors alike.
  • 💻 New adhesive – stronger hold. It may leave a light residue when removed, but this wipes off easily with a soft cloth and warm, soapy water. Fewer air bubbles – for the smoothest finish, don’t peel off the entire backing at once. Instead, fold back a small section, line it up, and press gradually as you peel more. The “peel-and-stick-all-at-once” method does NOT work for stickers like ours.
  • 💻 Made in the USA – Trusted Quality – Designed, printed, and packaged in the USA. Backed by responsive customer support and a satisfaction guarantee.
function Get-ChangedValue {
    'changed'
}

$text = Get-ChangedValue

For details, see Microsoft’s about_Ref help.

Native pointers and interop: an advanced boundary

PowerShell can work with .NET types such as [System.IntPtr] and call native APIs through interop, but that is different from aliases, variables, and [ref]. Pointer-heavy work may involve Add-Type, C# interop declarations, Marshal, SafeHandle, platform-specific libraries, and correct architecture and calling-convention details. It is not a routine way to refer to a PowerShell object.

For example, [int].MakePointerType() creates runtime type metadata describing a pointer type. It does not return a live memory address or a pointer to a PowerShell object. A PowerShell community discussion illustrates this distinction.

Modernize older PowerShell guidance

The original article’s WMI reference reflects its time. For modern Windows management, CIM cmdlets such as Get-CimInstance are generally the better starting point where the target supports them:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Get-CimInstance -ClassName Win32_OperatingSystem

Do not assume that every WMI command has a drop-in, cross-platform replacement. Availability depends on the operating system, PowerShell edition, module, remoting protocol, and target class. Many Windows-management commands are Windows-specific even though PowerShell 7 itself runs on multiple operating systems.

Execution policy is another area where old quick tips can mislead. Inspect the effective policy and its scopes with:

Get-ExecutionPolicy
Get-ExecutionPolicy -List

Execution-policy behavior depends on scope and platform, and it is not a complete security boundary. Do not treat a broad unrestricted setting as a routine fix. Script trust, code signing, source validation, least privilege, and organizational controls are separate concerns; follow your organization’s policy.

Quick reference and troubleshooting

Need Try
List aliases in this session Get-Alias
Resolve one alias Get-Alias ll
Find aliases for a command Get-Alias -Definition Get-ChildItem
Find matching commands Get-Command *process*
Inspect command syntax Get-Command Get-Service -Syntax
Show command examples Get-Help Get-Service -Examples
Read conceptual help Get-Help about_Scopes
Check the PowerShell edition and version $PSVersionTable
Check execution-policy scopes Get-ExecutionPolicy -List
Locate the current profile $PROFILE

If a command or help page is missing, follow this sequence:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Check the session and version: $PSVersionTable.
  2. Ask whether PowerShell recognizes the name: Get-Command name.
  3. If you expected an alias, inspect it: Get-Alias name.
  4. Check installed modules: Get-Module -ListAvailable; import a module if appropriate.
  5. Try local help and, if needed, refresh it: Get-Help name -Full and Update-Help.
  6. For scripts that will not run, inspect—not blindly weaken—the policy: Get-ExecutionPolicy -List.

For current release information, consult the PowerShell release page. It listed PowerShell 7.6.5 as the latest release on August 18, 2026, with a release date of August 14, 2026; that is a dated status, not a guarantee it will remain the latest.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.