Powershell脚本CPU使用率高

时间:2019-12-27 14:30:35

标签: windows performance powershell server

我有一个简单的脚本,可以在多个服务器上查找文件。问题在于,每台服务器上都挂有CPU并导致生产工作负载出现问题。我如何才能使该脚本不对我的机器进行DDoS处理?!

Start-transcript C:\tools\Querylog.txt

$Servers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} -Properties OperatingSystem

Invoke-command -ComputerName $Server-ScriptBlock {Get-ChildItem -Path $_.Root -Recurse -Force -File -ErrorAction SilentlyContinue | Where-Object { $_.Name -like '*somefile-readme*' } |Out-File -FilePath <filePath>\results.txt -Append}

Stop-Transcript

1 个答案:

答案 0 :(得分:2)

Use the -Filter option with Get-ChildItem,它比返回所有对象并使用Where-Object进行过滤的性能要高得多。


此外,与您的CPU问题无关,但在如何设计Get-ADComputer调用方面,请为这些cmdlet上的-Filter自变量使用you should use a String, not a ScriptBlock。从那个答案:

  

-Filter不支持ScriptBlocks,但它们有时会工作的种类,因为它们在评估之前就已获得ToString。如果您使用$_$emailAddress之类的简单变量扩展,它们在技术上会起作用,但最终会令您头疼,特别是如果您尝试访问对象属性(如上),因为它根本不会工作。每次都使用字符串过滤器,如果需要将对象属性用作过滤器参数,请使用Variable SubstitutionCommand Substitution