我正在使用powershell来编写数据库对象的脚本以进行定期审核。我现在已经达到了这一点,我在功能上很开心...但希望它更快一些。在SO上找到了这个并试图实现它...但是,我没有看到速度有任何改进。是否SMO连接的性质使得该过程无论如何都是串行的?谷歌获得的信息非常少......有人可以点亮一些光吗?
答案 0 :(得分:1)
foreach -parallel
construct只能在PowerShell工作流定义中使用,而不能在高级功能中使用。以下是您如何使用它的简短示例。
workflow Audit-DB {
$ComputerList = @('server1', 'server2', 'server3')*100;
foreach -parallel ($Computer in $ComputerList) {
Get-Date -Format 'hh:mm:ss';
# Run your database audit code here.
}
}
Audit-DB;
Get-Date
位只是为了表明它确实并行工作。
当您在PowerShell Workflow中工作时,要记住的重要一点是,您只能调用活动,而不是PowerShell函数。 PowerShell会自动将其许多核心cmdlet转换为活动,但您需要了解其中的差异。值得庆幸的是,有一个名为InlineScript
的活动允许您调用常规的PowerShell脚本代码。
Workflow的一个很酷的事情是你甚至不需要使用foreach -parallel
结构。而是自动获取-PSComputerName
参数,该参数允许您在远程计算机上部署工作流。这要求您提前在所有目标系统上配置PowerShell远程处理,因为Workflow位于它之上。
-AsJob
参数。
以下示例显示了InlineScript
,-AsJob
参数以及如何将工作流部署到远程计算机。
workflow Audit-DBWorkflow {
InlineScript {
function Audit-DB {
# Run your audit code here
}
Audit-DB;
}
}
$ComputerList = @('localhost', 'localhost')*10; # Create an array of computers
Audit-DBWorkflow -PSComputerName $ComputerList -AsJob;