问题标签 [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.
powershell - 如何通过引用 Powershell 作业或运行空间来传递变量?
我有 Powershell 工作。
如何通过参考$a
并$b
在工作完成后更新它们?或者如何通过引用运行空间来传递变量?
powershell - Receive-Job 如何保持正确的记录顺序
我试图了解 Receive-Job 如何在内部工作。在下面的代码中,我可以看到 Job 对象在哪里保存来自不同流的记录:
但是我如何编写自己的 Receive-Job 版本并保持不同消息的原始顺序?我试图检查源代码,但它没有多大意义:
arrays - 在 PowerShell 中处理大型数组
我很难理解在 PowerShell 中处理大型数据集/数组的最有效方法。我有包含数百万个需要处理和分组的项目的数组。这个列表的大小总是不同的,这意味着它可能是 350 万件或 1000 万件。
示例:他们按“4”分组的 350 万个项目,如下所示:
项目 0,1,2,3 组合在一起 4,5,6,7 组合在一起,依此类推。
我尝试通过循环遍历列表并分配给一个 pscustomobject 来使用单个线程处理数组,该对象只需 45-50 分钟即可完成。
我还尝试将数组分解为更小的数组,但这会导致进程运行时间更长。
我可以想象,如果我应用一个允许我运行多个作业的作业调度程序,会大大减少处理时间,但我想让其他人采取一种快速有效的方法来解决这个问题。
powershell - 从 USB 复制项目不能作为作业工作
我正在使用 USB 的路径(假设插入一个驱动器)而不是驱动器号将文件复制到 USB。我需要这样做,因为我正在使用它一次克隆 52 个 USB。
这是找到路径前缀的地方:
当与文件名的其余部分连接时,它会变成:
当我Copy-Item
在工作之外打电话时,一切正常并正常复制。当我Copy-Item
在 PowerShell 作业中调用时,它会失败并抱怨路径。这对我来说没有任何意义。
有人可以告诉我为什么我的功能copyFilesSync
可以正常工作,而copyFiles
不能正常工作吗?
为简单起见,我将脚本缩减为仅重现此问题的元素。$filestoCopyJSON1
和之间没有实际区别$filestoCopyJSON2
。交换实际文件没有任何区别。我只需要两个文件名,这样我就可以背靠背运行这两个函数,而且它们不会复制同一个文件:
这将产生以下输出:
Copy-Item
不在作业中的第一个文件成功完成。作业中的异步Copy-Item
运行失败,出现错误。
powershell - $Using:var 在 Invoke-Command 内的 Start-Job 中
我正在使用Invoke-Command
,并且在-ScriptBlock
我正在使用的范围内Start-Job
。我必须使用$Using:var
withinStart-Job
但会话正在查找本地会话中声明的变量(之前声明Invoke-Command
)。这是我正在做的一个非常简短的示例:
$using
如果我在调用变量时省略了,Start-Job -ScriptBlock {}
那么我会得到一个Cannot find an overload for "CreateFromDirectory" and the argument count: "4".
错误,因为变量没有在那个范围内定义。
有没有一种方法可以用于远程$using
会话中的变量而不是本地变量,或者我可以指定另一个范围来从远程会话中获取变量?我可以在修复此问题之前在本地声明这些变量,但由于变量包含动态值(所有这些都在 a 中,其数据是在远程计算机上检索的,所以我需要做大量工作)如果我无法完成这项工作,请重组整个脚本)。Invoke-Command
foreach ($obj in $objects)
如果这有什么不同,我在 Windows Server 2012 R2(源主机和-ComputerName
调用命令的主机)上使用 PS v5.1。
查看这个答案,我发现您可以将变量公开给较低级别的脚本块,但我需要从远程会话中实际声明变量。该值需要来自运行远程会话的计算机。您能否在远程会话中声明变量,使其可用于顶级脚本块中的脚本块?
powershell - PowerShell 作业如何等待来自父会话的作业?
为了在另一个作业完成而不阻塞当前会话时做一些工作,我想创建一个等待另一个作业的作业,但是当创建第二个作业时,它无法检测到第一个作业。
结果是
该命令找不到作业 ID 为 17 的作业。请验证 Id 参数的值,然后重试该命令。
似乎当您开始工作时,它会使用自己的工作 ID 获得自己的会话。作业可以启动子作业并可以等待这些作业。有没有办法让作业在父会话中等待作业(兄弟作业)?
我在about_Jobs或about_Job_Details文档中找不到任何相关信息。
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
powershell - PowerShell 为 cmdlet 实现 -AsJob
有没有像 Invoke-Command 那样在自定义 cmdlet 中实现开关参数 -AsJob 的好方法?
我想到的唯一方法是:
有更好的方法吗?我在这方面找不到 Microsoft 文档,任何线索都有帮助。
powershell - PowerShell 从 Jobs 获取日志
我正在使用一个名为Logging的 PowerShell 模块。我使用其他作业做一些工作,但不幸的是,我在其中写入的日志没有被命令 Receive-Job 接收。
有没有办法将输出重定向到父 powershell 会话?我看到 Write-Host 有效,但带有控制台目标的记录器没有。有什么解决方法吗?
multithreading - 在使用 Start-ThreadJob 启动的线程中修改 PowerShell $using 范围变量
如果我了解PowerShell 范围文档,则应该可以$using
从开始使用的线程分配范围变量Start-ThreadJob
。文档说(强调我的):
在以下
Using
上下文中支持范围修饰符:
- ...
- 线程作业,通过
Start-ThreadJob
或ForEach-Object -Parallel
(单独的线程会话)启动根据上下文,嵌入的变量值要么是调用者范围内数据的独立副本,要么是对其的引用。
...
在线程会话中,它们通过引用传递。这意味着可以在不同的线程中修改调用范围变量。安全地修改变量需要线程同步。
然而以下无法运行:
它错误$using:foo = 2
:
赋值表达式无效。赋值运算符的输入必须是能够接受赋值的对象,例如变量或属性。
打印变量 withWrite-Host $using:foo
可以正常工作。
我正在使用 PowerShell 7.1。