我基本上是在使用运行空间构建自己的并行 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) 我一直在寻找互联网上的各种资源,但找不到我理解的确定答案,所以我在这里问:
如何从z/OS MVS调用z/OS UNIX代码?
我知道BPXBATCH PGM ...可以从z/OS MVS TSO调用z/OS UNIX程序.
但我可以这样做,例如在az/OS MVS PL/I程序中吗?
我想说的是,
我的用例是:我有一个20世纪70年代的旧PL/I库,现在需要进行网络连接.据我所知,网络将在z/OS UNIX世界中顺利进行.
旧的PL/I库静态链接到我无法直接影响的多个其他软件.
PS:有声望更高的人可以建立一个stackoverflow PLI标签吗?;-)