Удалите все профили пользователей, в которые не входили последние 6 месяцев, используя Cim и Powershell. - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу освободить место на диске C на моих серверах, удалив профили пользователей из C: \ пользователей, которые не заходили на сервер в течение последних 6 месяцев.Я подключаюсь к серверам с помощью команд PowerShell Cim.

До сих пор я нашел только команду Get-CimInstance -CimSession $CimSession -ClassName Win32_UserProfile, которая выведет список профилей пользователей, но не перечислит время последнего входа для каждого пользователя.Есть ли другая команда, которая может быть использована для отображения UserProfiles с LastLogon?Получив этот список, я хочу удалить любой профиль, который не входил на сервер в течение последних 6 месяцев.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Будьте внимательны при удалении профилей, вы не хотите попадать на специальные учетные записи машины.Win32_UserProfile class имеет свойство a LastUseTime, на которое можно положиться.

$session = New-CimSession -ComputerName $cn
$gcimParams = @{
    'CimSession' = $session
    'ClassName'  = 'Win32_UserProfile'
    'Filter'     = 'RefCount<1 and Special="false" and Loaded="false"'
}
$profileList = (Get-CimInstance @gcimParams).Where{$PSItem.LastUseTime -lt (Get-Date).AddMonths(-6)}

foreach ($user in $profileList)
{
    $user | Remove-CimInstance -CimSession $session
}
0 голосов
/ 19 сентября 2018

Как удалить профили пользователей старше указанного количества дней в Windows

В этом примере скрипта PowerShell показано, как удалить профили пользователей старше указанного количества дней.

Example 1:  

C:\Script\RemoveLocalUserProfile.ps1 -ListUnusedDay 1

Example 2: 
C:\Script\RemoveLocalUserProfile.ps1 -DeleteUnusedDay 1 -ExcludedUsers “marry” 

# Begin Script
If ($ProfileInfo -eq $null) 
{ 
    Write-Warning -Message "The item not found." 
} 
Else 
{ 
    Foreach ($RemoveProfile in $ProfileInfo) 
    { 
        #Prompt message 
        $Caption = "Remove Profile" 
        $Message = "Are you sure you want to remove profile '$($RemoveProfile.LocalPath)'?" 
        $Choices = [System.Management.Automation.Host.ChoiceDescription[]]` 
        @("&Yes", "&No") 

        [Int]$DefaultChoice = 1 

        $ChoiceRTN = $Host.UI.PromptForChoice($Caption, $Message, $Choices, $DefaultChoice) 

        Switch ($ChoiceRTN) 
        { 
            0
            { 
                Try {$RemoveProfile.Delete(); Write-Host "Delete profile '$($RemoveProfile.LocalPath)' successfully."} 
                Catch {Write-Host "Delete profile failed." -ForegroundColor Red} 
            } 
            1 {break} 
        } 
    } 
    $ProfileInfo|Select-Object @{Expression = {$_.__SERVER}; Label = "ComputerName"}, ` 
    @{Expression = {$_.ConvertToDateTime($_.LastUseTime)}; Label = "LastUseTime"},` 
    @{Name = "Action"; Expression = {If (Test-Path -Path $_.LocalPath) 
            {"Not Deleted"} 
            Else 
            {"Deleted"} 
        }
    } 
}
# End Script

Подобные подходы можно увидеть здесь:

https://community.spiceworks.com/how_to/124316-delete-user-profiles-with-powershell

https://www.business.com/articles/powershell-manage-user-profiles

...