无法覆盖变量,因为它是只读的

pau*_*ter 5 windows powershell

我正在努力学习Powershell.我有以下脚本:

$cmd = {
  param($pid)
  Write-Host $pid
}

$processes = Get-Process -Name notepad
foreach ($process in $processes) 
{ 
    $pid = $process.ID
    Start-Job -ScriptBlock $cmd -ArgumentList $pid
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法覆盖变量PID,因为它是只读或常量.在行:7 char:1 + $ pid = 1 + ~~~~~~~~ + CategoryInfo:WriteError:(PID:String)[],SessionStateUnauthorizedAccessException + FullyQualifiedErrorId:VariableNotWritable无法覆盖变量PID,因为它是只读的或不变.在行:11 char:1 + $ pid = $ process.ID + ~~~~~~~~~~~~~~~~~~ + CategoryInfo:WriteError:(PID:String)[],SessionStateUnauthorizedAccessException + FullyQualifiedErrorId :VariableNotWritable Start-Job:无法覆盖变量pid,因为它是只读或常量.在行:12 char:5 + Start-Job -ScriptBlock $ cmd -ArgumentList $ pid

我在这做错了什么?

mjo*_*nor 9

$PID是一个保留的自动变量,包含会话的进程ID.你不能设置它.

看到:

Get-Help about_Automatic_Variables 
Run Code Online (Sandbox Code Playgroud)

有关自动变量的完整列表和说明.

编辑:

要输出所有记事本进程的进程ID:

 Get-Process -Name notepad |
   Select -ExpandProperty ID 
Run Code Online (Sandbox Code Playgroud)