问题标签 [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 投票
1 回答
3425 浏览

powershell - Powershell启动作业脚本块未执行

我有一些非常简单的代码,旨在将目录中的每个文件转换为 HTML。我的问题是,虽然为每个文件成功创建了一个作业,但脚本块永远不会运行。

我对powershell相当陌生,并且已经尝试过解决这个问题的方法,但似乎无法弄清楚。

0 投票
1 回答
4103 浏览

powershell - 在 ScriptBlock 内时,带有 -Credential 的 Enter-PSSession 仍会提示输入凭据

我有一个使用 Enter-PSSession 自动将用户登录到远程 PowerShell 会话的脚本。我使用 New-Object System.Management.Automation.PSCredential 创建 -Credential。如果它不在 ScriptBlock 中,这将非常有用。当我将它放在脚本块中时,它会在尝试连接时提示我输入凭据,但我不知道为什么。

我将如何使它在 ScriptBlock 中工作?

0 投票
2 回答
61 浏览

powershell - 如何在没有脚本块的情况下引用整个管道对象

随着 PowerShell V3 的出现,不再需要编写:

...现在可以写得更简洁:

...外壳使用的明显胜利(ahem)。

现在假设我有一个简单的字符串数组,称之为$stuff. 是否可以减少这种情况:

...以类似于第一个示例的方式,即删除脚本块并引用整个对象,在这种情况下?

0 投票
1 回答
416 浏览

powershell - 在 powershell 中获取测试执行的平均 CPU 利用率

上下文:
我想运行一个测试,并在它运行时收集 CPU 利用率。基本上,当我开始测试时,我还想开始收集 CPU 利用率数据,在测试结束时,我还想停止收集 CPU 利用率数据(然后取平均值)。
在 Win7 上使用 PowerShell 3

方法:
在测试开始时,我添加了一个启动后台作业的函数。后台作业执行一个脚本块,该脚本块运行一个“while ($true)”循环,该循环收集平均 CPU 利用率并将其保存到文件中。在测试结束时,我读取文件,平均收集的数据并停止并删除作业。

问题:
对于当前的方法,脚本块并不总是被执行,也没有收集到新数据。如果我多次运行测试,脚本块将被执行(在其中一次运行中) - 我想不出任何相关或这种行为。如果我在测试中的任何地方使用断点,脚本块也总是会被执行。
想不出别的办法。

需要的答案:
1. 为什么脚本块没有被执行?以及如何让它执行?
2. 是否有其他方法可以在测试期间收集资源数据?

请注意,代码已经通过各种尝试和失败运行,不再“漂亮”。
代码:

0 投票
0 回答
1491 浏览

powershell - 以 IF 语句作为函数参数的脚本块

我有这个脚本文件包含:

我有两个问题: 1. 如果脚本块包含 IF 语句,则执行失败并出现错误,例如“术语 'someofArguments' 未被识别为 cmdlet 的名称......”。

但如果没有 IF 语句,一切正常。那么如何使用 IF 语句发送该脚本块呢?

  1. 如何避免在带有变量 $true、$false 和主要是 $null 的 $command 中使用反引号?因为没有反引号,它们被翻译为 true、false 和nothing

谢谢你。

PS:我发现这个主题PowerShell function with parameterized script block和类似的帖子,说将 scriptblock 作为字符串发送,并在函数本身将其转换为 scriptblock 类型。

编辑:我想出了这个解决方案,但它不是很好。有人知道比这样放反引号更简单的解决方案吗?

0 投票
2 回答
6137 浏览

variables - 脚本块中的Powershell扩展变量

我正在尝试按照本文扩展脚本块中的变量

我的代码尝试这样做:

如何修复错误:

0 投票
4 回答
982 浏览

powershell - 什么时候 ScriptBlock 不是 ScriptBlock?

我并不是说这个问题听起来太可爱了,但这确实是手头的问题。考虑在 $env:PSModulePath 下安装的 PowerShell 模块 Test.psm1 中定义的以下两个函数:

导入模块后,我可以运行同步功能...

...并显示来自 Get-Process 的适当输出。

但是,当我尝试运行异步版本时......

...然后查看其输出...

...它只是将参数引入 Start-Test 函数失败,报告它无法将字符串转换为 ScriptBlock。因此,-Block $using:Block传递的是字符串而不是 ScriptBlock!

经过一些实验,我确实找到了解决方法。如果我修改 Start-Test 以便 $Block 参数的类型是 [string] 而不是 [ScriptBlock] - 然后将该字符串转换回一个块以提供给 Invoke-Command ...

然后,当我从上面运行相同的命令时,我会获得正确的结果:

在我的初始示例中using范围是否正常工作(将 ScriptBlock 转换为字符串)?关于它的有限文档(about_Remote_Variablesabout_Scopes)提供的指导很少。最终,当 $Block 参数输入为 [ScriptBlock] 时,有没有办法让 Start-Test 工作?

0 投票
1 回答
853 浏览

c# - 如何将 ScriptBlocks 合并到托管的 Powershell 环境中

我最近开始探索 powershell 脚本以及 powershell 托管。

在 powershell 命令提示符下,以下行将按我的预期执行。

此脚本输出管道中的“费用” ($_) 以及作为参数传入 scriptBlock ($args) 的“fi”、“fo”和“fum”。

我试图通过使用 System.Management.Automation.Powershell 类来实现同样的结果。

当我尝试这个时:

我的结果数组包含一个空元素(不确定那里发生了什么)。

如果我试试这个:

仅输出“费用”。$args 数组为空。

最后,当我尝试这个时:

我离得最近。流水线的“fee”,以及“fi”、“fo”和“fum”参数都是输出。然而,这样做的问题是,理想情况下,我更愿意将我的参数动态传递给 scriptBlock,而不是将它们连接到脚本块表达式中。

我的问题是如何在托管的 powershell 环境中创建一个脚本块,它既可以访问从中调用它的管道中的数据,也可以接受参数?我只能实现其中之一。我正在使用 .Net 框架的 4.5 版和 System.Management.Automation 程序集的 3 版。

0 投票
1 回答
1931 浏览

powershell - 在作业之间共享变量

我有一个 powershell 脚本,它应该运行一个后台作业,直到用户决定它应该结束。后台作业是这个脚本块:

如您所见,我试图传入一个布尔值 ( $killSwitch) 作为While在用户/调用者完成后停止循环的一种方式。我用以下方式调用它:

我收到一个错误:

无法处理参数“killSwitch”上的参数转换。参数中需要引用类型。

如何通过引用代码块来传递布尔值,以便我可以从作业外部终止 while 循环?可能吗?

0 投票
1 回答
1221 浏览

sql-server - 使用 Powershell 和脚本块进行远程 Microsoft SQL Server 数据库还原

长期潜伏者,第一次海报。我希望这里有人可以帮我解决一个让我难过的问题。本质上,我正在尝试编写一个 Powershell 脚本,它将多部分 SQL Server 数据库恢复到远程服务器。我已经弄乱了invoke-commandscript-block功能,以至于我了解如何使用变量和参数......但是我注意到一些非常有趣的行为。

这是我现在的代码:

这会产生如下错误:

System.Data.SqlClient.SqlError: 无法打开备份设备“S:\Landing\testdb1.bak,S:\Landing\testdb2.bak”。操作系统错误 123(文件名、目录名或卷标语法不正确。)。

但是,如果我将相同的路径硬编码到我的脚本块中,它可以工作:

我注意到的另一件有趣的事情是,如果我只有一个文件要恢复,使用第一种方法和变量可以工作:

希望这对某人有意义。我花了几个小时尝试了很多不同的方法来让它工作——但我似乎无法弄清楚。任何帮助或建议表示赞赏。

谢谢!