I recently ran into a puzzling issue while troubleshooting some PowerShell code, and I'm hoping someone can help me clarify the behavior of $PSItem within a switch statement. Here's what I found:
I used the following code to get a list of processes:
```
$proc = Get-Process
$proc | ForEach-Object {
switch ($PSItem.Name) {
Default {$PSItem.Name}
}
}
```
I expected to see the output of $PSItem.Name, but instead, there was no output. It seems that $PSItem gets altered to the switch expression, which caused the issue. When I switched the default case to use just $PSItem, it worked but then it became just $PSItem.Name instead. I later realized I might not have fully understood how the automatic variables work, especially as indicated in the about_switch documentation that mentions that the `switch` statement can utilize both `$_` and `$switch` variables. Can someone break this down for me?
3 Answers
Just a heads up: you don't actually need a loop to use a switch statement on the process names. You can simplify it like this:
```
$proc = Get-Process
switch ($proc.ProcessName) {
Default { $_ }
}
```
It's a lot cleaner!
When you're in the switch block, $PSItem actually stops referring to the original object from ForEach-Object. Instead, you might want to capture it with a different variable first. Check this out:
```
$proc = Get-Process
$proc | ForEach-Object {
$innerProc = $_
switch ($innerProc.Name) {
Default { $innerProc.Name }
}
}
```
This way, you can still access the original process object without losing it to the switch context.
I've always found that using foreach looks cleaner than ForEach-Object, but that might just be me. Here’s a more organized way to implement it:
```
$ProcessList = Get-Process
foreach ($process in $ProcessList) {
switch ($process.Name) {
Default { $process.Name }
}
}
```
Or even more straightforward:
```
foreach ($process in Get-Process) {
switch ($process.Name) {
Default { $process.Name }
}
}
```
Usually keeps things neater!

Related Questions
How To: Running Codex CLI on Windows with Azure OpenAI
Set Wordpress Featured Image Using Javascript
How To Fix PHP Random Being The Same
Why no WebP Support with Wordpress
Replace Wordpress Cron With Linux Cron
Customize Yoast Canonical URL Programmatically