首页 文章

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

提问于
浏览
3

我正在努力学习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
}

我收到以下错误:

无法覆盖变量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-作业:无法覆盖变量pid,因为它是只读或常量 . 在行:12 char:5 Start-Job -ScriptBlock $ cmd -ArgumentList $ pid

我在这做错了什么?

1 回答

  • 6

    $PIDreserved, automatic variable,其中包含会话的进程ID . 你无法设置它 .

    看到:

    Get-Help about_Automatic_Variables
    

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

    编辑:

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

    Get-Process -Name notepad |
       Select -ExpandProperty ID
    

相关问题