微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将每次运行的所有数据存储在缓存中,并在下次运行时检查它是否已经存在于缓存中以加快运行速度?

如何解决如何将每次运行的所有数据存储在缓存中,并在下次运行时检查它是否已经存在于缓存中以加快运行速度?

您好,我是 Powershell 初学者和自学者。通过缓存上次运行的最后数据,我终于使我的脚本更快了。

现在我正在尝试在运行脚本时存储所有内容。请问一下,如果数据已经存在,存储所有运行的所有数据并在下次运行之前先检查它的最佳方法是什么? 提前谢谢你们

这是我的代码

function Get-CachedGroupMembership($groupname){
        $groupName = "cached_$($groupName)"
        $cachedResults = Get-Variable -Scope Global -Name $groupName -ErrorAction SilentlyContinue
        if($null -ne $cachedResults){
         "found cached result"
         $existing = write-host "Check: i found existing"
         return $cachedResults,$existing
        }
        else{
         $searching = write-host "Check: Searching"
         $results = get-adgroup $groupname -properties memberof,members
         Set-CachedGroupMembership -groupName $groupName -value $results
         
         return $searching
        }
     }
    
     Function Set-CachedGroupMembership($groupName,$value){
        Set-Variable -Scope Global -Name $groupName -Value $value
        return $value
    }
      function Get-ADUsers_cached { 
        param ( 
            [Parameter(ValuefromPipeline = $true,mandatory = $true)][String] $GroupName
        ) 
        [int]$circular = $null
    
        # result holder
        $resultHolder = @()
            $table = $null 
            $nestedmembers = $null 
            $adgroupname = $null     
    
            # get members of the group and member of
            # $ADGroupname = get-adgroup $groupname -properties memberof,members
            $ADGroupname = Get-CachedGroupMembership -GroupName $groupName 
    
            # list all members as list (no headers) and save to var
            $memberof = $adgroupname | select -expand memberof 
           
            if ($adgroupname) {  
                if ($circular) { 
                    $nestedMembers = Get-ADGroupMember -Identity $GroupName -recursive 
                    $circular = $null 
                } 
                else { 
                    $nestedMembers = Get-ADGroupMember -Identity $GroupName | sort objectclass -Descending
                    # if get adgroupmember returns nothing,it uses the members for ordinary getADGroup
                    if (!($nestedmembers)) {
                        $unkNown = $ADGroupname |select -expand members
                        if ($unkNown) {
                            $nestedmembers = @()
                            foreach ($member in $unkNown) {
                                $nestedmembers += get-adobject $member
                            }
                        }
                    }
                } 
                # loops through each member
                ForEach($nestedmember in $nestedmembers){ 
                    # creates the properties into a custom object. 
                    $Props = @{
                        Type            = $nestedmember.objectclass;
                        Name            = $nestedmember.name;
                        displayName     = "";
                        ParentGroup     = $ADgroupname.name;
                        Enabled         = "";
                        nesting         = $nesting;
                        DN              = $nestedmember.distinguishedname;
                        Comment         = ""
                        EmployeeNumber  = "";
                        LastlogonDate   = "";
                        PasswordLastSet = "";
                    } 
                    # if member object is a user
                    if ($nestedmember.objectclass -eq "user") { 
                        # saves all the properties in the table. 
                        $nestedADMember = get-aduser $nestedmember.Name -properties enabled,displayname,EmployeeNumber,LastlogonDate,PasswordLastSet
                        $table = new-object psobject -property $props 
                        $table.enabled = $nestedadmember.enabled
                        $table.name = $nestedadmember.samaccountname
                        $table.displayname = $nestedadmember.displayname
                        $table.EmployeeNumber = $nestedadmember.EmployeeNumber
                        $table.LastlogonDate = $nestedadmember.LastlogonDate
                        $table.PasswordLastSet = $nestedadmember.PasswordLastSet
    
                        #save all in 1 storage
                        $resultHOlder += $table | select type,name,parentgroup,nesting,enabled,dn,comment,PasswordLastSet
                    } 
    
    
                    # if member object is group
                    elseif ($nestedmember.objectclass -eq "group") {  
                        $table = new-object psobject -Property $props 
                        # if circular,meaning the groups member of list contains one of its members. 
                        # e.g. if group 2 is a member of group 1 and group 1 is a member of grou 2
                        if ($memberof -contains $nestedmember.distinguishedname) { 
                            $table.comment = "Circular membership" 
                            $circular = 1 
                        } 
                        # for circular output
                        #$table | select type,comment 
                        #calling function itself
                        $resultHOlder += Get-ADUsers_cached -GroupName $nestedmember.distinguishedname                             
                    } 
                    else { 
                        if ($nestedmember) {
                            $table = new-object psobject -property $props
                            $resultHolder += $table | select type,PasswordLastSet
                        }
                    } 
                } 
            } 
    
    
    
        return   $resultHOlder 
    
    }
    function Get-nestedGroupUsers_cached {
        param ( 
            [Parameter(Mandatory = $true)][String]$FileName,[Parameter(Mandatory = $true)][String]$searchFileURL
        )
        $storageHolder = @()
        $groupList = Get-Content $searchFileURL 
        $groupList |  ForEach-Object { 
            $allusers = Get-ADUsers_cached -GroupName $_
            $storageHolder += $allusers  
           
        }
        $storageHolder | select ParentGroup,Name,Enabled,PasswordLastSet  |Export-Csv -Path "C:\Users\***\Desktop\$FileName.csv" -NoTypeinformation -Force
    } 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。