Ich versuche ein Skript zu erstellen, das Domänenbenutzerprofile erkennt, die bis zu 15 Tage alt sind, und diese entfernt. Dies wird in einem Job gebündelt, der alle Leerlaufsitzungen vor der Ausführung abmeldet.Skript weist WMI-Objekte dem Array nicht korrekt zu
Ich bin mir bewusst, dass dies normalerweise über GPO erfolgen würde, jedoch ist es aus verschiedenen Gründen für diesen bestimmten Geschäftsbereich nicht geeignet.
Hier ist mein Code:
#Assign how old the user profile must be for deletion
[int]$NoOfDays = 15
#Get WMI object where it is a domain account and over 15 days old
$Objects = @(Get-WmiObject -Class Win32_UserProfile | Where {
(!$_.Special) -and
$_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-15)
})
if ($Objects -eq $null) {
#If no users returned, write to host.
Write-Host "no profiles found for deletion"
} else {
#If users are found, do the following
foreach ($Object in $Objects) {
Write-Host "'$($object.LocalPath)' has been identified for deletion"
}
foreach ($Object in $Objects) {
try {
Write-Host "Attempting to delete profile '$($Object.LocalPath)'"
Remove-WmiObject
Write-Host "Deleted profile '$($Object.LocalPath)' successfully."
} catch {
Write-Host "Unable to delete profile '$($Object.LocalPath)'" -ErrorAction Continue
}
}
}
Es erfolgt keine Ausgabe, es gibt nur sofort ohne Fehlerzeile zu befehlen.
Ich habe versucht, das Bit auskommentieren, das das Profil entfernt, das else nach dem ersten für jede Anweisung zu beenden, um zu sehen, was zur Löschung identifiziert wird, aber es hat nicht funktioniert.
es schien, dass ein paar Eingabeargumente für den Remove-WmiObject Cmdlets sind in den obigen Code gegeben verpasst. –
@Andrei Odegov yeah Entschuldigung, danke für das Hinzeigen. Ich habe es geschafft, dass die Löschung korrekt funktioniert. –