Ce que j'essaie de faire, c'est de prendre les noms de connexion qui datent de plus de 90 jours et de les comparer à la liste des profils courants en sortie de Get-WmiObject Win32_UserProfile
. J'ai essayé pendant ce qui semble être des heures et je n'arrive toujours pas à comprendre pourquoi il ne traite pas la liste de noms comme (je pense) il devrait le faire.Filtrage de la sortie par une liste avec PowerShell
Invoke-Command -ComputerName wsci201oit -ScriptBlock {
$AllUsers = Get-WmiObject Win32_UserProfile | Where-Object -FilterScript {
$_.LocalPath -notlike 'c:\windows*' -and
$_.LocalPath -notlike '*ADMINISTRATOR' -and
$_.LocalPath -notlike '*Public' -and
$_.LocalPath -notlike '*Temp'
} | Select-Object -Property LocalPath, SID
$Over90 = Get-ChildItem C:\Users | where {
$_.LastWriteTime -lt (Get-Date).AddDays(-30) -and
$_.Name -notlike 'ADMINISTRATOR' -and
$_.Name -notlike 'Public' -and
$_.Name -notlike 'TEMP'
} | Select-Object Name
$Over90 | Select-Object Name | Out-File C:\Windows\Temp\Over90.txt
$List = Get-Content -Path C:\Windows\Temp\Over90.txt
$AllUsers | Where-Object { $_.LocalPath -like "*$List" }
}
Le outlput de $AllUsers
contient un chemin comme C: \ Users \ adm-Thomas et le SID. La sortie de $List
contient juste adm-thomas. J'essaye de faire correspondre les "adm-thomas" de $List
au LocalPath "C: \ Users \ adm-thomas" et de tester contre chaque nom dans $List
.
Je n'étais pas au courant de la commande split-path car cela éliminait complètement le problème que j'avais. J'ai seulement écrit les résultats dans une liste en partie par frustration et en partie parce que tout ceci est contenu dans une invocation-commande et cela tirerait PSComputerName et RunspaceId indépendamment de mon 'select-object'. C'est beaucoup plus élégant que mon essai original mais je peux encore le comprendre alors merci beaucoup! –