我正在编写一个脚本来删除超过90天的Windows用户配置文件。
运行以下命令时
Get-ciminstance -Class win32_userprofile | where-object {$_.LastuseTime -gt (get-date).AddDays(90)
我的工作站的“LastUseTime”都重置为每次机器重新启动时,每两周自动重新启动一次。因此,作为回报,我在运行该cmdlet时返回了所有配置文件。
我尝试进入C:\users\目录,使用以下脚本标识90天前最后一次修改的用户文件夹,并将值分配给变量。用户的ID为6位数(例如123456、111222.e、021561)。我们希望避免删除名称中包含字母的配置文件(例如c:\users\markdavis c:\users\administrator)
$profiles = Get-childitem -Path C:\Users\* -Directory | where-object {$_.LastWriteTime -lt (get-date).AddDays(-90)} | Where-Object {$_.Name -match "\d\d\d\d\d\d"} | Select-Object -Property FullName
检查变量将返回
PS C:\WINDOWS\system32> $profiles
FullName
--------
C:\Users\123456
C:\Users\111222.e
C:\Users\021561
现在,我在完成脚本时遇到了麻烦,因为在使用Remove-CIMInstance删除用户配置文件之前,以下cmdlet无法提取正确过滤的用户配置文件,我尝试了许多不同的方法来尝试使其工作,现在我怀疑是否有可能将变量传递给以下脚本。感谢帮助!
$profiles = Get-childitem -Path C:\Users\* -Directory | where-object {$_.LastWriteTime -lt (get-date).AddDays(-90)} | Where-Object {$_.Name -match "\d\d\d\d\d\d"} | Select-Object -Property FullName
forEach($profile in $profiles){
Get-ciminstance -Class win32_userprofile | Where-object {$_.LocalPath -match "$profile"} | Remove-CimInstance
}
我也尝试过将forceing传递到数组中,但也没有成功。
$profiles = @(Get-childitem -Path C:\Users\* -Directory | where-object {$_.LastWriteTime -lt (get-date).AddDays(-90)} | Where-Object {$_.Name -match "\d\d\d\d\d\d"} | Select-Object -Property FullName)
1条答案
按热度按时间zpjtge221#
尝试(以数组形式获取
FullName
属性):或者(使用
Where-Object
获得的每个对象的FullName属性):