在 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
我有一个数组,我想传递给一个变量,然后传递给一个 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