使用Powershell为多个用户删除多个目录

时间:2015-04-16 15:32:39

标签: powershell foreach

我希望你星期四下午好。我想知道你是否可以帮助我。

我正在尝试编写一个ForEach-Object语句,它将遍历用户名列表并删除一些目录。

对远程桌面终端服务器有50多个用户并且C:驱动器上的空间不足的情况进行成像,因为c:\users\%username%\appdata\local\temp中的每个人都有很多文件。我想写一个脚本,看起来为所有用户删除该目录。

所以我的手指引导我键入以下内容(我创建了一个带有标题SamAccountName的列的csv和下面行中的一些用户名,名为users.csv并放在c的根目录中) - 添加到此,该脚本最终将包含多个目录:

Import-Csv -path c:\users.csv | ForEach-Object { Remove-Item -Path c:\users\$_.SamAccountName\Appdata\Local\Temp -Recurse -Force }

错误消息是:

Cannot find path 'C:\users\@{SamAccountName=user1}.SamAccountName\Appdata\Local\Temp'

User1确实存在,但看起来PowerShell并没有像我期望的那样调用变量。当然,我需要返回C:\users\user1\Appdata\Local\Temp

的路径

你能在这里建议正确的方法吗?

2 个答案:

答案 0 :(得分:1)

路径是一个字符串。要在可扩展字符串中使用对象属性,请使用$()子表达式语法。

Import-Csv -path c:\users.csv | ForEach-Object { Remove-Item -Path "c:\users\$($_.SamAccountName)\Appdata\Local\Temp" -Recurse -Force }

答案 1 :(得分:1)

希望你也有一个好人!

当您尝试访问字符串中对象的属性时,会导致您的问题,为此,您必须将其封装起来:

$($_.SamAccountName)

整行都是:

Import-Csv -path c:\users.csv | ForEach-Object { Remove-Item -Path c:\users\$($_.SamAccountName)\Appdata\Local\Temp -Recurse -Force }

尝试一下,让我知道这是否有效!