none
Поиск доменных профилей RRS feed

  • Вопрос

  • Написал скрип для очистки старых, не используемых профилей, столкнулся с проблемой разделить доменные и локальные профиля, мне необходимо работать только с доменными профилями. У меня вопрос как можно определить что профиль не локальный а доменный, есть ли это в свойствах объекта (Get-WmiObject Win32_UserProfile)

    Листинг скрипта привожу ниже:

    cls
    $OldUserProfile= "C:\OldUserProfile\"
    $liveDays= 10


    function FindOldUserProfile
    {
    $UserProfile= Get-WmiObject Win32_UserProfile
                $DtLog= Get-Date -Format 'dd-MM-yyyy'
                $Log= $OldUserProfile + $DtLog + "logUserProfiles.log"
                New-Item -Path $Log -ItemType "file" -Force 
        foreach ($a in $UserProfile)
            {
                $objSID = New-Object System.Security.Principal.SecurityIdentifier($a.SID) -ErrorAction SilentlyContinue
                #$a.SID
                $error.Clear()
                $objUser = 0
                $objUser = $objSID.Translate([System.Security.Principal.NTAccount])
                $objUser.Value
                $a.LocalPath
                if ($objUser -eq 0)
                    {
                        CopyOldUserProfile -CopyUserFolder $a.LocalPath 
                        "Not found user: $a" | Out-File -FilePath $Log -Append
                        #$a | Remove-WmiObject                
                    } 
                $objUser.Value
            
        }
        ClearOldUserProfile
    }

    function CopyOldUserProfile
    {
        param ($CopyUserFolder)
        $NameUserFolder= Get-Acl -Path $CopyUserFolder                  
        $NameUserFolder= $NameUserFolder.PSChildName 
        $LogCopyUserFolder= $OldUserProfile + $NameUserFolder + "\LogCopyUserFiles.log"
        New-Item -Path $LogCopyUserFolder -ItemType "file" -Force
        Copy-Item -Path $CopyUserFolder -Recurse -Destination $OldUserProfile -Force -ErrorAction SilentlyContinue -ErrorVariable BadCopy 
        $BadCopy= $BadCopy | foreach {$_.TargetObject}
        $BadCopy= $BadCopy | foreach {$_.fullname}    
        $BadCopy | Out-File -FilePath $LogCopyUserFolder -Append
        $NewUserFolder= $OldUserProfile + $NameUserFolder
        Get-ChildItem -Path $NewUserFolder -Recurse | Out-File -FilePath $LogCopyUserFolder -Append
        


    }

    function ClearOldUserProfile
    {
        $ListOldUserProfile=  Get-ChildItem -Path $OldUserProfile
        foreach ($d in $ListOldUserProfile)
        {
                foreach ($s in $d.FullName)
                {
                
                    $LiveTime=  New-TimeSpan $(Get-Date (gi $s).CreationTime) $(Get-Date)               
                    if([int]$LiveTime.Days -ge $LiveDays)
                        {
                            "Remove $s" | Out-File -FilePath $Log -Append
                            Remove-Item -Path $s -Force -Recurse
                        }
                    else
                        {
                            "Not remove $s" | Out-File -FilePath $Log -Append                      
                        }
                }
         }

    ClearNotUseProfile
    }


    function ConvertDateString
    {
        param(
            [string]$String,
            [string]$Pattern,
            [System.Globalization.CultureInfo]$Culture = (Get-Culture),
            [switch]$PassThru
        )
     
        $result = try{ [DateTime]::ParseExact($String,$Pattern,$Culture) } catch{}
     
        if($PassThru -and $result)
        {
            $result
        }
        else
        {
            $result
        }
     
    }

    function ClearNotUseProfile
    {
    $DateNow= Get-Date
    $UserProfile= Get-WmiObject Win32_UserProfile
    foreach ($k in $UserProfile)
        {
                foreach ($s in $k.LastUseTime)
                {
                  $s.Substring(0,8)
                  $LastUseTime=  ConvertDateString -String $s.Substring(0,8) -Pattern 'yyyyMMdd' 
                  $Days= $DateNow - $LastUseTime
         $Days= $Days.Days
                  $Loaded= $k.Loaded
                  $Special= $k.Special
                  if ($Loaded -eq 0)
                  {
                    if ($Special -eq 0)
                        {
                            if ($Days -ge $liveDays)
                                {                 
                        $h= $k.LocalPath
                                     Write-Host "Clear Not Use Profile: $h [$Days days]"
                                     "Clear Not Use Profile: $h [$Days days]" | Out-File -FilePath $Log -Append
                                        #$k | Remove-WmiObject 
                                }   
                        } 
                  }       
                }
         }

    cls

    FindOldUserProfile

    17 сентября 2013 г. 10:01

Ответы

  • $machine = (Get-WmiObject Win32_UserAccount -Filter "LocalAccount=$true")[0].Sid.Substring(0,39)

    Get-WmiObject Win32_UserProfile -Filter "Special='$false' and Not SID like '$machine%'"


    • Помечено в качестве ответа Didenko.g 17 сентября 2013 г. 11:08
    17 сентября 2013 г. 10:29
    Отвечающий