powershell 从get-childitem文件夹路径创建数组,以删除Windows用户配置文件

chhkpiq4  于 2023-02-16  发布在  Shell
关注(0)|答案(1)|浏览(198)

我正在编写一个脚本来删除超过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)
zpjtge22

zpjtge221#

尝试(以数组形式获取FullName属性):

$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"}).FullName

forEach($profile in $profiles){
    Get-CimInstance -class win32_userprofile | Where-Object {$_.LocalPath -match "$profile"} | Remove-CimInstance
}

或者(使用Where-Object获得的每个对象的FullName属性):

$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"}

forEach($profile in $profiles){
    Get-ciminstance -Class win32_userprofile | Where-object {$_.LocalPath -match $profile.FullName} | Remove-CimInstance
}

相关问题