在 pwsh 中,如何使用像 {$_.UserId} 这样的脚本块从对象中获取一些信息?
In pwsh, how do you use a script block like {$_.UserId} to get some information from an object?
我有一个包含名为 PKBlock 的字段的对象,该字段接受脚本值
$o.PKBlock = { return $_.UserId }
或
$o.PKBlock = { return $_.GroupId + $_.ResourceId }
我想传递一个对象(此处显示在 json)
{
"UserId":"aodpkjpw92kjd",
"GroupId":"90djd0223djd",
"ResourceId":"012ekkkk023"
}
如何执行脚本块并获取 return 值?
我尝试了以下方法(其中 $record 是作为对象的对象):
Invoke-Command -ScriptBlock $o.PKBlock -InputObject $record
Invoke-Command -ScriptBlock $o.PKBlock -ArgumentList $record
$record | Invoke-Command -ScriptBlock $o.PKBLock
首先,脚本块中未命名的自动变量是$args
。第一个参数是 $args[0]
,第二个是 $args[1]
,等等。所有参数都包含在 $args
中
您可以通过几种不同的方式调用脚本块。
& # call operator, new child scope
. # call operator, calling scope. Also used for "dot sourcing"
Invoke-Command
下一个问题是,如果您想按名称访问 json 属性,则需要将其设为一个对象。可能最简单的是 ConvertFrom-Json
。一旦你纠正了这两个问题,其中任何一个都应该有效。
$o.PKBlock = { return $args[0].userid }
$json = @'
{
"UserId":"aodpkjpw92kjd",
"GroupId":"90djd0223djd",
"ResourceId":"012ekkkk023"
}
'@ | ConvertFrom-Json
现在调用它
& $o.PKBlock $json
或
. $o.PKBlock $json
或
Invoke-Command -ScriptBlock $o.PKBlock -ArgumentList $json
您还可以为脚本块提供命名参数
$o.PKBlock = {
Param($object) return $object.userid
}
以同样的方式调用它。
编辑
$_
或 $PSItem
是任意数量的 cmdlet 的自动变量。如果你真的想使用那个 vs args/named 参数,你可以传入 Foreach-Object
$json | ForEach-Object {. $o.PKBlock $_}
或
$json | ForEach-Object {. $o.PKBlock $psitem}
我有一个包含名为 PKBlock 的字段的对象,该字段接受脚本值
$o.PKBlock = { return $_.UserId }
或
$o.PKBlock = { return $_.GroupId + $_.ResourceId }
我想传递一个对象(此处显示在 json)
{
"UserId":"aodpkjpw92kjd",
"GroupId":"90djd0223djd",
"ResourceId":"012ekkkk023"
}
如何执行脚本块并获取 return 值?
我尝试了以下方法(其中 $record 是作为对象的对象):
Invoke-Command -ScriptBlock $o.PKBlock -InputObject $record
Invoke-Command -ScriptBlock $o.PKBlock -ArgumentList $record
$record | Invoke-Command -ScriptBlock $o.PKBLock
首先,脚本块中未命名的自动变量是$args
。第一个参数是 $args[0]
,第二个是 $args[1]
,等等。所有参数都包含在 $args
您可以通过几种不同的方式调用脚本块。
& # call operator, new child scope
. # call operator, calling scope. Also used for "dot sourcing"
Invoke-Command
下一个问题是,如果您想按名称访问 json 属性,则需要将其设为一个对象。可能最简单的是 ConvertFrom-Json
。一旦你纠正了这两个问题,其中任何一个都应该有效。
$o.PKBlock = { return $args[0].userid }
$json = @'
{
"UserId":"aodpkjpw92kjd",
"GroupId":"90djd0223djd",
"ResourceId":"012ekkkk023"
}
'@ | ConvertFrom-Json
现在调用它
& $o.PKBlock $json
或
. $o.PKBlock $json
或
Invoke-Command -ScriptBlock $o.PKBlock -ArgumentList $json
您还可以为脚本块提供命名参数
$o.PKBlock = {
Param($object) return $object.userid
}
以同样的方式调用它。
编辑
$_
或 $PSItem
是任意数量的 cmdlet 的自动变量。如果你真的想使用那个 vs args/named 参数,你可以传入 Foreach-Object
$json | ForEach-Object {. $o.PKBlock $_}
或
$json | ForEach-Object {. $o.PKBlock $psitem}