Я пытаюсь создать сценарий powershell, который удаляет учетные записи, если они не вошли в рабочую станцию windows 10 после определенного количества дней.
Этот скрипт будет запускаться локально, а не удаленно .
Я думаю, что я очень близок к решению, но по какой-то причине, даже если я делаю, как показывает документация @ microsoft, я не могу удалить учетные записи с параметром inputobject.
Например, я пытаюсь удалить учетные записи 3 и 2, потому что они имеют одинаковую дату LastUseTime.
Аккаунт - LastUseTime
testuser3 - 20190625
testuser2 - 20190625
testuser1 - 20190629
Код:
<# Change Value to remove account after a certain days #>
$DaysFilterAccounts = (get-date (Get-Date).AddDays(-6) -UFormat "%Y%m%d")
<# $CheckLastUseTime
Get all UserProfiles, Filter Service and Admin-accounts
Select and convert LastUsetime to a date object
Where only accounts lastusetime is Less Or Equal to $DaysFilterAccounts
#>
$CheckLastUseTime = Get-CimInstance -Filter "Special=False AND Loaded=False" -ClassName Win32_UserProfile |
Select-Object @{Name="LastUseTime";Expression={Get-Date $_.Lastusetime -Format "yyyyMMdd" } } |
Where-Object { $_.LastUseTime -Le $DaysFilterAccounts }
<# Create a String for Lastusetime #>
$AccountLastUseTime = $CheckLastUseTime.Lastusetime
<#
ForEach-Object In $GetProfiles If .LastUsetime is Less Or Equal to $DaysFilterAccounts
Then Get the UserProfile Data And
Remove Profiledata
#>
If ( $AccountLastUseTime -Le $DaysFilterAccounts )
{
$RemoveTheseAccounts = Get-CimInstance -Filter "Special=False AND Loaded=False" -ClassName Win32_UserProfile |
Select-Object Sid, Localpath, @{Name="LastUseTime";Expression={Get-Date $_.Lastusetime -Format "yyyyMMdd" }} |
Where-Object { $_.LastUseTime -Le $DaysFilterAccounts }
Remove-CimInstance -InputObject $RemoveTheseAccounts
} Else { Write-Warning -Message "Error" }
Ошибка сообщения:
Remove-CimInstance : Cannot convert 'System.Object[]' to the type 'Microsoft.Management.Infrastructure.CimInstance'
required by parameter 'InputObject'. Specified method is not supported.
At C:\Users\fardin.TEST\Desktop\Rolf v 3.ps1:52 char:39
+ Remove-CimInstance -InputObject $RemoveTheseAccounts
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-CimInstance], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.Management.Infrastructure.CimCmdlets.RemoveCimInstanceCommand
Решение:
<# Change Value to remove account after a certain days #>
$DaysFilterAccounts = (get-date (Get-Date).AddDays(-180) -UFormat "%Y%m%d")
<# $CheckLastUseTime
Get all UserProfiles, Filter Service and Admin-accounts
Select and convert LastUsetime to a date object
Where only accounts lastusetime is Less Or Equal to $DaysFilterAccounts
#>
$CheckLastUseTime = Get-CimInstance -Filter "Special=False AND Loaded=False" -ClassName Win32_UserProfile |
Select-Object @{Name="LastUseTime";Expression={Get-Date $_.Lastusetime -Format "yyyyMMdd" } } |
Where-Object { $_.LastUseTime -Le $DaysFilterAccounts }
<# Create a String for Lastusetime #>
$AccountLastUseTime = $CheckLastUseTime.Lastusetime
<#
ForEach-Object In $GetProfiles If .LastUsetime is Less Or Equal to $DaysFilterAccounts
Then Get the UserProfile Data And
Remove Profiledata
#>
If ( $AccountLastUseTime -Le $DaysFilterAccounts )
{
# Remove Profiles
$GetUserProfileData = Get-WmiObject -Class Win32_UserProfile -Filter "Special=False AND Loaded=False" |
Where { $_.LastUseTime -Le $DaysFilterAccounts }
$GetUserProfileData | Remove-WmiObject
} Else { Write-Warning -Message "Error" }