Powershell 在函数中使用 $sender

问题描述 投票:0回答:1

我是 PS 新手,想了解 $sender 变量是什么以及它是如何工作的。我之前在函数中使用过 $this ,这非常简单。然而,我一生都无法理解 $sender 的作用或它在传递给函数时的行为方式。我尝试了广泛的搜索,但找不到任何其使用的示例。我希望有人能用外行人的术语解释 $sender 是什么,并提供传递给函数的示例。

powershell
1个回答
0
投票

文档清楚地解释了

$sender
是什么。它是一个自动变量,会自动填充到
Register-ObjectEvent
Register-EngineEvent
的 Action 块上下文中,并表示生成事件的实例。

也许 2 个示例可以提供帮助,对于

DataAdded
事件
$sender
将是
PSDataCollection<T>
的实例:

try {
    $collection = [System.Management.Automation.PSDataCollection[int]]::new()
    $evt = Register-ObjectEvent -InputObject $collection -EventName DataAdded -Action {
        "`$sender is of type: '$($sender.GetType())'",
        "Last item added was: '$($sender[-1])'" | Out-Host
    }
    Start-Sleep 1
    $collection.Add(1)

    # On Addition you would see:
    #
    # $sender is of type: 'System.Management.Automation.PSDataCollection[int]'
    # Last item added was: '1'
}
finally {
    Unregister-Event $evt.Name
}

Register-EngineEvent
的情况下,我们可以根据需要自定义它,在本示例中,我们可以将字符串发送到操作块:

try {
    $evt = Register-EngineEvent -SourceIdentifier MyCustomEvent -Action {
        "`$sender is of type: '$($sender.GetType())'" | Out-Host
    }

    Start-Sleep 1
    $null = New-Event -SourceIdentifier MyCustomEvent -Sender 'hi!'
    # After generating this event we would see that the sender is a `string`
}
finally {
    Unregister-Event $evt.Name
}
© www.soinside.com 2019 - 2024. All rights reserved.