【问题标题】:PowerShell Script to add date to folder name in list of home directories saved in variablePowerShell脚本将日期添加到保存在变量中的主目录列表中的文件夹名称
【发布时间】:2017-03-09 22:07:33
【问题描述】:

我是 PowerShell 新手。我有一个用户的 .csv 文件,我提取了一个主目录列表以使用以下内容:

$hdirpath = Get-Content C:\Temp\UserList.csv | ForEach {Get-ADUser $_ -properties HomeDirectory | Select HomeDirectory}

上面的输出示例如下所示:

主目录

\服务器名\用户\roc03\用户名
\服务器名\用户\nov01\用户名
\服务器名\用户\roc05\用户名

现在我想检查每个用户路径中是否存在文件夹,如果存在,我想将今天的日期添加到该文件夹​​名称的末尾。我知道有一个 If-Exist-Then 命令我可以使用,但我不确定如何将它与 $hdirpath 中保存的信息一起使用。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    本人新手,如有错误请见谅。

    从我的脑海中,我想到了这一点:

    foreach ($path in $hdirpath) {
    
    $folders = Get-ChildItem $_ -Recurse | Where-Object {$_.PSIsContainer -eq $True} | Select-Object FullName
    
    $folders | if ($_.Name -eq "Folder Name") {Rename-Item "Folder Name" + Get-Date}
    }
    

    可能有人会纠正我,但如果他们不试一试,如果您有任何问题,请告诉我。

    另外 - 仅供将来参考,请确保在发布问题之前包含您尝试过的代码。

    编辑

    所以,我现在得到了以下内容:

    $hdirpath = Get-Content C:\temp\dir.txt
    
    $fullDate = Get-Date
    $date = $($fullDate.ToShortDateString())
    $day = $date -replace "/", "."
    
    foreach ($path in $hdirpath) {
    
        Get-ChildItem -Path $_ -Recurse | Where-Object {$_.PSIsContainer -eq $true} |
            Rename-Item -NewName {if ($_.Name.StartsWith('target') -and $_.Name.EndsWith('folder')) {$_.Name + " " + $($day)}}
    }
    

    这会返回多个错误,表明它是Cannot evaluate parameter 'NewName' because its argument input did not produce any output.,但它可以工作并将文件夹名称附加到当前日期。

    第 3-5 行获取日期并将其格式化为“。”而不是 ”\”。您可以对其进行格式化,但显然对您有用。

    我的测试结构是“C:\temp\roc6\username1”——有多个子文件夹和多个“usernameX”。我要重命名的测试文件夹称为“targetfolder”。最终结果以“targetfolder 08.03.2017”结尾。

    修订

    这将是我最后一次运行脚本 - 以我的有限知识,这是我能做的最好的。

    $ErrorActionPreference = "SilentlyContinue"
    $hdirpath = Get-Content C:\temp\dir.txt
    
    $fullDate = Get-Date
    $day = $($fullDate.ToShortDateString()) -replace "/", "."
    
    foreach ($path in $hdirpath) {
       Get-ChildItem -Path $_ -Recurse | Where-Object {$_.PSIsContainer -eq $true} |
       Rename-Item -NewName {if ($_.Name.StartsWith('target') -and $_.Name.EndsWith('folder')) {$_.Name + " " + $($day)}}
    }
    

    【讨论】:

    • 感谢您的快速回复。我的代码是 'Get-Item -Path "\\servername\Users\roc06\username\Portability" | Rename-Item -NewName "Portability$(Get-Date -Format ""MMddyyyy"")" ' 每次与一个用户打交道时有效。当我尝试您的代码时,不幸的是,我收到一个错误,指出术语“if”未被识别为 cmdlet、函数...等的名称。我尝试在“If”之前添加“foreach-object”,但出现错误,指出无法找到接受参数“System.Object []”的位置参数。不知道下一步该做什么。
    • 我记得把日期整理成我想要的格式,然后把它放在我脚本顶部的一个变量中。也许如果您有用户名列表,您可以将“用户名”从“\\servername\users\roc06\username\portability”位与变量交换?那么使用foreach函数呢? (抱歉从我的手机发帖,否则会发布示例代码)
    • 希望就这么简单。不幸的是,这不起作用,因为用户名上方的文件夹(在本例中为 roc06)对于每个用户并不总是相同的。这就是为什么我必须在变量 $hdirpath 中为每个用户使用完整路径。
    • 好的,我明天必须再给你一个合适的外观,然后尝试在我的末端复制它
    • @user3642200 - 我在答案的底部添加了一个新脚本。试一试,让我知道它是否适合你。
    猜你喜欢
    • 2012-12-09
    • 2011-10-22
    • 2022-08-19
    • 2018-08-01
    • 1970-01-01
    • 2013-07-17
    • 2018-04-28
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多