问题标签 [scriptblock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
857 浏览

powershell - 如何使用 $_ 自动变量调用 powershell 脚本块

什么有效 -

假设我有一个scriptblockSelect-Objectcmdlet 一起使用的。

这工作正常,我得到了预期的结果。

我正在尝试做的事情 -

但是,在稍后的代码中,我想重用scriptblock定义为$jobTypeSelector.

例如,我希望下面的代码采用$fooJob注意它是单个对象)作为下面的参数传递,并用于$_自动变量scriptblock并返回相同的结果,因为它在Select-Objectcmdlet 的上下文中执行时返回。

什么不起作用 -

它不像我预期的那样工作,我得到了空值。

我已经尝试过的-

  1. 我检查了,属性都设置正确,不是因为相关属性本身是空白或$null.

  2. 我在互联网上查看,似乎很难找到关于该主题的任何相关页面,但我最终找到了一个在稍微不同的上下文中接近解释该问题的页面——在 PowerShell 中调用脚本块。该博客没有直接回答我的问题,任何相关的解释只会导致一个非常丑陋的解决方案,在我看来很难阅读和维护。

问题 -

那么,scriptblock单个对象调用 a 的最佳方法是什么,它使用$_自动变量作为参数(而不是param块)

0 投票
1 回答
580 浏览

powershell - 使用 Set-Item 和 GetNewClosure 创建 Powershell 函数

我正在尝试构建一个函数,该函数本身可以通过 Set-Item 命令创建函数,在该命令中,我将新函数的脚本块传递给 Set-Item 的 -Value 参数。我遇到了一个问题,在脚本块上使用 GetNewClosure 似乎不起作用,我只是不知道我做错了什么。

在下面的代码中,首先我手动创建了一个按预期工作的函数(testFunc),在函数创建后将 $x 设置为 2 不会导致函数返回 2;相反,它返回 1,因为这是创建函数时 $x 的值。但是当我尝试通过 make-function 函数做同样的事情时,行为会发生变化。

我确定我忽略了一些小东西。

0 投票
2 回答
479 浏览

powershell - 脚本块上的powershell循环

我正在尝试将对象集合中的多个信息导出到 CSV 文件中。

为此,我总是有以下管道:

而不是复制/粘贴这些行,我希望有一个哈希表,其中 CSV 文件名作为键,< ... > 之间的部分作为值

所以我这样做了:

我正在尝试像那样执行它,但它不起作用:

关于如何做的任何想法?

问候。JB

0 投票
1 回答
277 浏览

powershell - 有没有办法创建一个支持管道参数绑定的 Cmdlet“委托”?

在 .NET 中,如果您有一个子例程,其实现可能会从一个调用更改为另一个调用,您可以将委托传递给使用该子例程的方法。 您也可以在 Powershell 中执行此操作。您还可以使用已被描述为 Powershell 等效匿名函数的脚本块。然而,惯用的 powershell 使用了 powershell 的管道参数绑定。但委托和脚本块似乎都没有使用 Powershell 的管道参数绑定。

是否有一种(惯用的)方法可以以保留对管道参数绑定的支持的方式将 powershell 命令行开关传递给另一个命令行开关?

这是我希望能够做的代码片段:

0 投票
1 回答
591 浏览

variables - 有没有办法在模块内的脚本块上下文中选择性地捕获变量?

假设您在一个模块(即一个.psm1文件)中定义了两个函数:

现在假设您运行以下命令:

$x2尽管在内部调用,但仍保留命令行的上下文$f2。如果您更改&..

在模块中替换$xn$xn.GetNewClosure()然后调用会f1捕获100但 not的值10

.GetNewClosure()发生这种情况是因为在内部调用f2“覆盖”了$a1捕获的值f1

有没有办法选择性地捕获脚本块中的变量?从这个例子开始,有没有办法同时捕捉$a1内部f1$a2内部f2


延伸阅读

PowerShell 作用域并不简单。考虑这个不完整的因素列表中的可能性:

  • 任何时候都可以有全局和模块范围层次结构的任意组合
  • .并且&调用对范围的影响不同,
  • 管道提供的复杂流控制意味着不同或相同范围层次结构的多个范围begin、、processend脚本块,甚至同一函数的多个调用可以同时处于活动状态

换句话说,PowerShell 作用域的工作描述抗拒简单性。

about_Scopes文档表明事情比实际上要简单得多。也许从这个问题分析和理解代码会导致更完整的理解。

0 投票
4 回答
715 浏览

powershell - 使用 $null splat 参数时,Powershell 何时尊重默认值?

考虑以下函数:

现在使用 splat 参数调用它:

正如预期的那样,没有返回任何内容。$null现在用splat 参数再试一次:

奇怪的是,scriptblock被退回。显然,至少对于参数,当使用splat 参数[scriptblock]时,powershell 不遵守默认值。$null但是 powershell 确实尊重[string]. 这里发生了什么?

使用 $null splat 参数时,Powershell 支持哪些类型的默认值?

0 投票
1 回答
2015 浏览

powershell - 脚本块中的Powershell调用批处理

我有下面的脚本没有按我想要的方式工作。最初,我想将 install.cmd 传递给将在后台使用“Start-Job”的函数,这样它就不会冻结主 Powershell 窗口。但我无法让它调用 install.cmd。

0 投票
3 回答
1287 浏览

powershell - Powershell 在 ScriptBlock 中传递参数

我正在尝试从远程服务器获取文件的最后写入时间。

这不起作用:

这确实有效:

任何人都可以帮助完成第一组工作吗?

0 投票
0 回答
151 浏览

powershell - 开始作业时超时并将变量传递给参数列表

我正在使用以下脚本尝试 ping 存储在 CSV 中的计算机列表。期望的结果是我将能够验证超时条件。

此脚本导致错误:

您必须在“-”运算符的右侧提供一个值表达式。”

如果我将参数列表移至此处:

我收到一个错误

无法验证参数“ComputerName”上的参数。参数为 null 或空。

我看过关于将变量传递给脚本块的文章和问题,但它们是 forInvoke-Command和 not Start-Job,我还没有让它在翻译中工作。我的印象是,如果它有效,我将看不到我期望的输出,即Write-Host.

0 投票
3 回答
6151 浏览

powershell - 在脚本块中执行多个命令并返回多个响应

我想连接到远程主机,运行 2 个命令并返回单独的响应。但是,我想将此作为一个脚本块的一部分。我以前用一个命令做过这个,但用两个命令就不高兴了。例如有

组合成一个脚本块并将该脚本块传递给Invoke-Command并从该调用中提取各个响应。