【问题标题】:Removing multiple directories for multiple users using Powershell使用 Powershell 为多个用户删除多个目录
【发布时间】:2015-04-16 15:32:38
【问题描述】:

希望你在这个晴朗的星期四下午过得愉快。不知道你能不能帮帮我。

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

想象一下远程桌面终端服务器有 50 多个用户并且由于每个人在 c:\users\%username%\appdata\local\temp 中有很多文件而导致 C: 驱动器上的空间不足的场景。我想编写一个脚本,看起来会为所有用户删除该目录。

所以我的手指引导我输入以下内容(我创建了一个 csv,其列标题为 SamAccountName 和一些用户名在下面的行中,称为 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的路径

你能在这里提出正确的方法吗?

【问题讨论】:

    标签: powershell foreach


    【解决方案1】:

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

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

    【讨论】:

    • 是的,建议与上述相同。确认的解决方案。也谢谢你
    【解决方案2】:

    希望你也过得很好!

    您的问题是在您尝试访问字符串中的对象的属性时引起的,为了做到这一点,您必须像这样封装它:

    $($_.SamAccountName)
    

    整行内容为:

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

    试一试,如果可行,请告诉我!

    【讨论】:

    • 宾果游戏。就那么简单。非常感谢您,先生
    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多