我希望你星期四下午好。我想知道你是否可以帮助我。
我正在尝试编写一个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
你能在这里建议正确的方法吗?
答案 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 }
尝试一下,让我知道这是否有效!