在pwsh中,如何使用类似{$_.UserId}的脚本块从对象中获取一些信息



我有一个对象,它包含一个名为PKBlock的字段,该字段接受脚本值

$o.PKBlock = { return $_.UserId }

$o.PKBlock = { return $_.GroupId + $_.ResourceId }

我想传递一个对象(显示在json中(

{
"UserId":"aodpkjpw92kjd",
"GroupId":"90djd0223djd",
"ResourceId":"012ekkkk023"
}

如何执行脚本块并获取返回值?

我尝试了以下操作($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/命名参数,你可以传递到Foreach-Object

$json | ForEach-Object {. $o.PKBlock $_}

$json | ForEach-Object {. $o.PKBlock $psitem}

相关内容

  • 没有找到相关文章

最新更新