小编fjf*_*002的帖子

如何在 ScriptBlock 中传递 $_ ($PSItem)

我基本上是在使用运行空间构建自己的并行 foreach 管道函数。

我的问题是:我这样调用我的函数:

somePipeline | MyNewForeachFunction { scriptBlockHere } | pipelineGoesOn...
Run Code Online (Sandbox Code Playgroud)

如何将$_参数正确传递到 ScriptBlock 中?当 ScriptBlock 包含作为第一行时它起作用

param($_)
Run Code Online (Sandbox Code Playgroud)

但是,正如你可能已经注意到,在PowerShell中内置的foreach对象和地点,对象也不会需要传递给他们的每脚本块这样的参数声明。

感谢您提前回答 fjf2002

编辑:

目标是:我想让函数的用户感到舒适MyNewForeachFunction——他们不需要param($_)在他们的脚本块中写一行。

在里面MyNewForeachFunction,ScriptBlock 当前被调用通过

$PSInstance = [powershell]::Create().AddScript($ScriptBlock).AddParameter('_', $_)
$PSInstance.BeginInvoke()
Run Code Online (Sandbox Code Playgroud)

编辑2:

关键是,例如内置函数的ForEach-Object实现如何实现$_不需要在其 ScriptBlock 参数中声明为参数,我也可以使用该功能吗?

(如果答案是,它ForEach-Object是一个内置函数并使用了一些我无法使用的魔法,那么在我看来,这将使整个 PowerShell 语言失去资格)

编辑3:

感谢 mklement0,我终于可以构建我的通用 foreach 循环。这是代码:

function ForEachParallel {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory)] [ScriptBlock] $ScriptBlock,
        [Parameter(Mandatory=$false)] [int] $PoolSize = 20,
        [Parameter(ValueFromPipeline)] $PipelineObject
    )

    Begin {
        $RunspacePool = [runspacefactory]::CreateRunspacePool(1, $poolSize) …
Run Code Online (Sandbox Code Playgroud)

powershell foreach pipe powershell-sdk

4
推荐指数
1
解决办法
960
查看次数

PL/I程序中的z/OS MVS和z/OS UNIX Interop?

我一直在寻找互联网上的各种资源,但找不到我理解的确定答案,所以我在这里问:

如何从z/OS MVS调用z/OS UNIX代码?

我知道BPXBATCH PGM ...可以从z/OS MVS TSO调用z/OS UNIX程序.

但我可以这样做,例如在az/OS MVS PL/I程序中吗?

我想说的是,

  • 我可以静态链接z/OS MVS PL/I对象模块和z/OS UNIX C对象模块吗?(除了不同的编程语言之外,两者之间是否存在差异?)
  • 或者我可以动态链接两者吗?

我的用例是:我有一个20世纪70年代的旧PL/I库,现在需要进行网络连接.据我所知,网络将在z/OS UNIX世界中顺利进行.

旧的PL/I库静态链接到我无法直接影响的多个其他软件.

PS:有声望更高的人可以建立一个stackoverflow PLI标签吗?;-)

unix mainframe zos mvs pl-i

2
推荐指数
2
解决办法
267
查看次数

标签 统计

foreach ×1

mainframe ×1

mvs ×1

pipe ×1

pl-i ×1

powershell ×1

powershell-sdk ×1

unix ×1

zos ×1