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
%forForEach-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.
Recommended Free Tools
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
- 💻 ✔️ 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:
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →$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
- 💻 ✔️ 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:
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.
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:
Rank #3
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:
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:
Rank #4
$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:
|,>,>>, andTee-Object
Operator behavior and syntax have details worth checking rather than guessing. For the full reference, use Get-Help about_Operators.
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.
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:
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →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
- ✅ 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:
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsGet-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:
- Check the session and version:
$PSVersionTable. - Ask whether PowerShell recognizes the name:
Get-Command name. - If you expected an alias, inspect it:
Get-Alias name. - Check installed modules:
Get-Module -ListAvailable; import a module if appropriate. - Try local help and, if needed, refresh it:
Get-Help name -FullandUpdate-Help. - 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.
Quick Recap
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.

