首页 > 解决方案 > 优化慢速powershell脚本

问题描述

我写了这个脚本,它可以工作,但是速度很慢,你能指出原因吗?并提供一些关于如何优化其功能的想法。in 可以制作简单的 Powershell 脚本,但是我非常有时间在 google 上查找方法,不知道要查找什么

我的脚本


$i=1;
foreach ($PC in $ComputerName) {
    $per = ($i/$ComputerName.Length)*100

    try {
        
        # Get-ADComputer $pcs -properties  name,enabled | select-object name,enabled

        $status = Get-ADComputer -Identity $PC -Properties Enabled | select-object -ExpandProperty Enabled
        
        if(Test-Connection -ComputerName $PC -Quiet -Count 1){
            $quserOut = quser.exe /SERVER:$PC 2>&1

            if ($quserOut -match "No user exists"){ 
                "$PC>On Line>$status>No users loggedIn"; continue 
            
            }else{
            
                $users = $quserOut -replace '\s{2,}', ',' |
                ConvertFrom-CSV -Header 'username', 'sessionname', 'id', 'state', 'idleTime', 'logonTime' |
                Add-Member -MemberType NoteProperty -Name ComputerName -Value $PC -PassThru
            
                $users = $users[1..$users.count]
            
                for ($i = 0; $i -lt $users.count; $i++){
                    if ($users[$i].sessionname -match '^\d+$'){
                        $users[$i].logonTime = $users[$i].idleTime
                        $users[$i].idleTime = $users[$i].STATE
                        $users[$i].STATE = $users[$i].ID
                        $users[$i].ID = $users[$i].SESSIONNAME
                        $users[$i].SESSIONNAME = $null
                    }
                }
                $users = $users | Sort-Object -Property idleTime
                
                # $status = Get-ADComputer -Identity $PC -Properties Enabled | select-object -ExpandProperty Enabled
                $Usr = $users | Where-Object { $_.state -eq 'Active' } | select-object -ExpandProperty username
                "$PC>On Line>$status>$Usr"
            }

        } else {
            "$PC>Not Online>$status>NoUserDataRetrieve"
        }

    }
    catch {
        "$PC>Not in AD>$status>NoUserDataRetrieve"
    }


    Write-Progress -Activity "Procesando  Usuarios:" -Status "Usuario EN Proceso: $i -- $PC" -PercentComplete $per
    Start-Sleep -Milliseconds 100

    $i++
}    

这将显示以下数据

基本上脚本测试 PC 是否存在于 Active Directory 中,它会执行 ping 测试,并取回当前登录用户

    Machine Name  > Ping Test pass? >  AD status  > current logged in user 


    PC1>Online>True>BazVic
    PC2>NotOnLine>True>No Available Data
    PC3>OnLine>True>ReyesDa
    PC2>NotOnLine>FALSE>No Available Data 

标签: powershelloptimizationpowershell-3.0

解决方案


推荐阅读