问题标签 [powershell-jobs]

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 回答
1796 浏览

powershell - 如何通过引用 Powershell 作业或运行空间来传递变量?

我有 Powershell 工作。

如何通过参考$a$b在工作完成后更新它们?或者如何通过引用运行空间来传递变量?

0 投票
1 回答
83 浏览

powershell - Receive-Job 如何保持正确的记录顺序

我试图了解 Receive-Job 如何在内部工作。在下面的代码中,我可以看到 Job 对象在哪里保存来自不同流的记录:

但是我如何编写自己的 Receive-Job 版本并保持不同消息的原始顺序?我试图检查源代码,但它没有多大意义:

https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs

0 投票
4 回答
880 浏览

arrays - 在 PowerShell 中处理大型数组

我很难理解在 PowerShell 中处理大型数据集/数组的最有效方法。我有包含数百万个需要处理和分组的项目的数组。这个列表的大小总是不同的,这意味着它可能是 350 万件或 1000 万件。

示例:他们按“4”分组的 350 万个项目,如下所示:

项目 0,1,2,3 组合在一起 4,5,6,7 组合在一起,依此类推。

我尝试通过循环遍历列表并分配给一个 pscustomobject 来使用单个线程处理数组,该对象只需 45-50 分钟即可完成。

我还尝试将数组分解为更小的数组,但这会导致进程运行时间更长。

我可以想象,如果我应用一个允许我运行多个作业的作业调度程序,会大大减少处理时间,但我想让其他人采取一种快速有效的方法来解决这个问题。

0 投票
1 回答
108 浏览

powershell - 从 USB 复制项目不能作为作业工作

我正在使用 USB 的路径(假设插入一个驱动器)而不是驱动器号将文件复制到 USB。我需要这样做,因为我正在使用它一次克隆 52 个 USB。

这是找到路径前缀的地方:

当与文件名的其余部分连接时,它会变成:

当我Copy-Item在工作之外打电话时,一切正常并正常复制。当我Copy-Item在 PowerShell 作业中调用时,它会失败并抱怨路径。这对我来说没有任何意义。

有人可以告诉我为什么我的功能copyFilesSync可以正常工作,而copyFiles不能正常工作吗?

为简单起见,我将脚本缩减为仅重现此问题的元素。$filestoCopyJSON1和之间没有实际区别$filestoCopyJSON2。交换实际文件没有任何区别。我只需要两个文件名,这样我就可以背靠背运行这两个函数,而且它们不会复制同一个文件:

这将产生以下输出:

Copy-Item不在作业中的第一个文件成功完成。作业中的异步Copy-Item运行失败,出现错误。

0 投票
1 回答
1327 浏览

powershell - $Using:var 在 Invoke-Command 内的 Start-Job 中

我正在使用Invoke-Command,并且在-ScriptBlock我正在使用的范围内Start-Job。我必须使用$Using:varwithinStart-Job但会话正在查找本地会话中声明的变量(之前声明Invoke-Command)。这是我正在做的一个非常简短的示例:

$using如果我在调用变量时省略了,Start-Job -ScriptBlock {}那么我会得到一个Cannot find an overload for "CreateFromDirectory" and the argument count: "4".错误,因为变量没有在那个范围内定义。

有没有一种方法可以用于远程$using会话中的变量而不是本地变量,或者我可以指定另一个范围来从远程会话中获取变量?我可以在修复此问题之前在本地声明这些变量,但由于变量包含动态值(所有这些都在 a 中,其数据是在远程计算机上检索的,所以我需要做大量工作)如果我无法完成这项工作,请重组整个脚本)。Invoke-Commandforeach ($obj in $objects)

如果这有什么不同,我在 Windows Server 2012 R2(源主机和-ComputerName调用命令的主机)上使用 PS v5.1。

查看这个答案,我发现您可以将变量公开给较低级别​​的脚本块,但我需要从远程会话中实际声明变量。该值需要来自运行远程会话的计算机。您能否在远程会话中声明变量,使其可用于顶级脚本块中的脚本块?

0 投票
0 回答
60 浏览

powershell - PowerShell 作业如何等待来自父会话的作业?

为了在另一个作业完成而不阻塞当前会话时做一些工作,我想创建一个等待另一个作业的作业,但是当创建第二个作业时,它无法检测到第一个作业。

结果是

该命令找不到作业 ID 为 17 的作业。请验证 Id 参数的值,然后重试该命令。

似乎当您开始工作时,它会使用自己的工作 ID 获得自己的会话。作业可以启动子作业并可以等待这些作业。有没有办法让作业在会话中等待作业(兄弟作业)?

我在about_Jobsabout_Job_Details文档中找不到任何相关信息。

0 投票
3 回答
998 浏览

powershell - Write to external array inside a running powershell job

I am trying to write data to external array while running a powershell job-

This is my code sample that I' m trying-

Expecting Output in $datafromJob Variable, but the end of job and loop variable is empty, M not getting how it will work, anyhelp,

Do let me know if any queries on this question

0 投票
1 回答
336 浏览

powershell - PowerShell 为 cmdlet 实现 -AsJob

有没有像 Invoke-Command 那样在自定义 cmdlet 中实现开关参数 -AsJob 的好方法?

我想到的唯一方法是:

有更好的方法吗?我在这方面找不到 Microsoft 文档,任何线索都有帮助。

0 投票
1 回答
217 浏览

powershell - PowerShell 从 Jobs 获取日志

我正在使用一个名为Logging的 PowerShell 模块。我使用其他作业做一些工作,但不幸的是,我在其中写入的日志没有被命令 Receive-Job 接收。

有没有办法将输出重定向到父 powershell 会话?我看到 Write-Host 有效,但带有控制台目标的记录器没有。有什么解决方法吗?

0 投票
1 回答
369 浏览

multithreading - 在使用 Start-ThreadJob 启动的线程中修改 PowerShell $using 范围变量

如果我了解PowerShell 范围文档,则应该可以$using从开始使用的线程分配范围变量Start-ThreadJob。文档说(强调我的):

在以下Using上下文中支持范围修饰符:

  • ...
  • 线程作业,通过Start-ThreadJobForEach-Object -Parallel(单独的线程会话)启动

根据上下文,嵌入的变量值要么是调用者范围内数据的独立副本,要么是对其的引用
...
在线程会话中,它们通过引用传递。这意味着可以在不同的线程中修改调用范围变量。安全地修改变量需要线程同步。

然而以下无法运行:

它错误$using:foo = 2

赋值表达式无效。赋值运算符的输入必须是能够接受赋值的对象,例如变量或属性。

打印变量 withWrite-Host $using:foo可以正常工作。

我正在使用 PowerShell 7.1。