在 PowerShell 中将变量传递到语句块括号中

Passing Variables Into Statement Block Brackets In PowerShell

我有一个数组,我想传递给一个变量,然后传递给一个 Register-ObjectEvent

看起来像这样:

$body = @{
    project_id = $project_id
    task_token = $task_token
}

$action = {Invoke-RestMethod -Uri http://localhost/temp.php -Method Post -Body $body}

Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier MyTimer -Action $action

我在上面注意到,当我将脚本块分配给 $action 时,$project_id$task_token 变量在 {} 之间丢失。

如何保留此处的变量?

至少出于两个原因,您的代码不应该按照您编写的方式工作。

第一 : 我不确定这个,但是当你写的时候 :

$body = @{
    project_id = $project_id
    task_token = $task_token
}

$body 是一个哈希表,所以您确定它将构成 -body 参数的良好值吗?

Second :动作脚本块将在另一个作业中执行,因此 $body 变量在动作块的范围内将不可用,如 writen Register-ObjectEvent文档:Action参数的值可以包含$Event、$EventSubscriber、$Sender、$EventArgs和$Args自动变量,这些变量向Action提供有关事件的信息脚本块。有关详细信息,请参阅 about_Automatic_Variables.".

所以在你的情况下,如果你想指定额外的数据与这个事件订阅相关联,你可以这样使用 -MessageData 参数(这里我不关心 备注):

$action = {Invoke-RestMethod -Uri http://localhost/temp.php -Method Post -Body $($event.MessageData)"}
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier MyTimer -Action $action -MessageData $body