Powershell 获取csv文件夹列表中每个子文件夹的LastAccessTime

Powershell 获取csv文件夹列表中每个子文件夹的LastAccessTime,powershell,csv,Powershell,Csv,我有一个csv($HomeDir)文件,如下所示: Users,Comments,HomeDir user1,account1,c:\folder1 user2,account2,c:\folder2 user3,account3,c:\folder3 用户、评论、HomeDir user1,account1,c:\folder1 user2,account2,c:\folder2 user3,account3,c:\folder3 我使用以下代码成功获取“HomeDir”列中每个子文件夹的La

我有一个csv($HomeDir)文件,如下所示:

Users,Comments,HomeDir user1,account1,c:\folder1 user2,account2,c:\folder2 user3,account3,c:\folder3 用户、评论、HomeDir user1,account1,c:\folder1 user2,account2,c:\folder2 user3,account3,c:\folder3 我使用以下代码成功获取“HomeDir”列中每个子文件夹的LastAccessTime:

$csv = Import-Csv $HomeDir foreach ($folder in $csv.HomeDir) { Get-ChildItem $folder -ErrorAction SilentlyContinue | ? {$_.PSIsContainer -eq "True"} | Select-Object FullName, @{Name='LastAccessTime'; Expression={$_.LastAccessTime.ToString('yyyyMMdd')}} | Sort-Object -Descending -Property LastAccessTime | Export-Csv $newcsv -NoTypeInformation -Append } $csv=导入csv$HomeDir foreach($csv.HomeDir中的文件夹){ Get ChildItem$文件夹-ErrorAction SilentlyContinue| ?{$\ PSIsContainer-eq“True”} 选择对象全名,@{Name='LastAccessTime';表达式={$\ LastAccessTime.ToString('yyyyMMdd')}| 排序对象-降序-属性LastAccessTime| 导出Csv$newcsv-NoTypeInformation-追加 } $newcsv的结果是:

"FullName","LastAccessTime" "c:\folder1\Sub1","20201223" "c:\folder1\Sub1a","20201223" "c:\folder1\Sub1b","20201223" "c:\folder2\Sub2","20201218" "c:\folder2\Sub2a","20201218" "c:\folder3\Sub3","20201212" "c:\folder3\Sub3a","20201215" "c:\folder3\Sub3b","20181215" "c:\folder3\Sub3c","20201011" “全名”、“LastAccessTime” “c:\folder1\Sub1”、“20201223” “c:\folder1\Sub1a”、“20201223” “c:\folder1\Sub1b”、“20201223” “c:\folder2\Sub2”、“20201218” “c:\folder2\Sub2a”、“20201218” “c:\folder3\Sub3”、“20201212” “c:\folder3\Sub3a”、“20201215” “c:\folder3\Sub3b”、“20181215” “c:\folder3\Sub3c”、“20201011” 问题是:有没有办法根据相应的“用户”列分配相关用户? 这样的输出对我来说也足够了

"Users","FullName","LastAccessTime" "user1","c:\felder1\Sub1","20201223" "user1","c:\folder1\Sub1a","20201223" "user1","c:\folder1\Sub1b","20201223" "user2","c:\folder2\Sub2","20201218" "user2","c:\folder2\Sub2a","20201218" "user3","c:\folder3\Sub3","20201212" "user3","c:\folder3\Sub3a","20201215" "user3","c:\folder3\Sub3b","20181215" "user3","c:\folder3\Sub3c","20201011" “用户”、“全名”、“LastAccessTime” “user1”、“c:\felder1\Sub1”、“20201223” “user1”、“c:\folder1\Sub1a”、“20201223” “user1”、“c:\folder1\Sub1b”、“20201223” “user2”、“c:\folder2\Sub2”、“20201218” “user2”、“c:\folder2\Sub2a”、“20201218” “user3”、“c:\folder3\Sub3”、“20201212” “user3”、“c:\folder3\Sub3a”、“20201215” “user3”、“c:\folder3\Sub3b”、“20181215” “user3”、“c:\folder3\Sub3c”、“20201011”
提前感谢

不要在循环之前拉出HomeDir属性,只需在循环中引用它,并将Users属性添加到Fullname和LastAccessTime属性中即可

$properties = @{Name='User'; Expression={$user}},
              'FullName',
              @{Name='LastAccessTime'; Expression={$_.LastAccessTime.ToString('yyyyMMdd')}}

Import-Csv $HomeDir | ForEach-Object {
    $user = $_.users
    Get-ChildItem $_.HomeDir -ErrorAction SilentlyContinue | 
        Where-Object {$_.PSIsContainer -eq "True"} | 
            Select-Object $properties |
                Sort-Object -Descending -Property LastAccessTime
} | Export-Csv $newcsv -NoTypeInformation
为了便于阅读,我事先将属性放入变量中。此外,如果您使用的是powershell版本3或更高版本,则可以使用
-Directory
参数来代替
$\psicContainer-eq$true
。最后,如果使用Foreach对象而不是Foreach循环,则可以通过管道导出,而不必多次使用
-Append
打开和关闭文件

$properties = @{Name='User'; Expression={$user}},
              'FullName',
              @{Name='LastAccessTime'; Expression={$_.LastAccessTime.ToString('yyyyMMdd')}}

Import-Csv $HomeDir | ForEach-Object {
    $user = $_.users
    Get-ChildItem $_.HomeDir -Directory -ErrorAction SilentlyContinue |  
        Select-Object $properties | Sort-Object -Descending -Property LastAccessTime
} | Export-Csv $newcsv -NoTypeInformation
我提出我的看法

$HomeDir="c:\temp\input.csv"
$newcsv="c:\temp\output.csv"

Import-Csv $HomeDir | %{

#save user name
$User=$_.Users

Get-ChildItem $_.HomeDir -ErrorAction SilentlyContinue -Directory | 
            Sort LastAccessTime -Descending |
                select @{N='Users'; E={$User}}, FullName,  @{N='LastAccessTime'; E={$_.LastAccessTime.ToString('yyyyMMdd')}}

} |  Export-Csv $newcsv -NoType

请允许我向新来者提供标准建议:如果你有答案,你将通过向未来的读者展示解决问题的方法来帮助他们。要接受答案,请单击大标题✓ 答案左侧大数字下方的符号(您将获得2点声誉积分)。如果你至少有15个声望点,你也可以投票给其他有用的答案(也可以选择被接受的答案)。如果您的问题尚未解决,请提供反馈,或者,如果您自己找到了解决方案,请提供反馈。谢谢!它按预期工作!当不存在时,我如何继续并在全名列中放置错误?如果homedir不存在,您想在那里放置类似“不存在”的内容吗?是的。对的不存在或访问被拒绝。这些是最常见的错误。