检索Powershell中日期范围之间修改的文件的完整路径和文件权限

问题描述

考虑到这是我第一次在stackoverflow上发表文章,这对PowerShell来说还很新。我要求大家对您的回复保持温和。

我正在尝试在HUGE生产服务器的日期范围之间修改内容。我希望将内容导出到一个.csv文件,其列分别代表FullName,LastWriteTime,User / Group,包含已修改文件的关联文件夹的权限(如果已继承)。

我已经浏览了众多的论坛,文章等,但未能获得所需的输出。这是我一直在尝试运行的代码

    $BaseFolder = "<path to be traversed>"

[datetime]$start = '2019-10-05 00:00:00'
[datetime]$end = '2020-10-25 00:00:00'

$Acl = Get-Acl -Path $BaseFolder

#For each Group or Username in ACL   
$Files = ForEach ($Access in $Acl.Access){

Get-ChildItem -Path $BaseFolder -Recurse -Force | Where-Object { $_.LastWriteTime -gt $start -AND $_.LastWriteTime -lt $end } | 
Select-Object #FullName,LastWriteTime
              @{Name='Path';Expression={$_.FullName}},@{Name='LastWriteTime';Expression={$_.LastWriteTime}},@{Name='Group/User';Expression=$Access.IdentityReference},@{Name='Permissions';Expression=$Access.FileSystemRights},@{Name='Inherited';Expression=$Access.IsInherited}

} 

$Files | Export-Csv "<save-path>\Folder-Permissions-$((Get-Date).ToString("yyyy-MM-dd_HHmmss")).csv" -NoTypeinformation

以下是一些更好的主意的屏幕截图:

当前输出

Although this does generate some output,it is not what I desire.

所需的输出

I desire an output similar to this(I have heavily edited this screenshot)

我们非常感谢您的帮助,在此先感谢您!

此致

Manish Murthy Chintakindi

解决方法

我想是select-object之后的注释弄乱了所有内容,因为后面有换行符,并且哈希表不会作为参数传递给命令。表达式定义中也存在问题(您必须将它们放在脚本块{}中)。

这应该有效:

$BaseFolder = "<path to be traversed>"

[datetime]$start = '2019-10-05 00:00:00'
[datetime]$end = '2020-10-25 00:00:00'

$Acl = Get-Acl -Path $BaseFolder

$Files = ForEach ($Access in $Acl.Access){
    Get-ChildItem -Path $BaseFolder -Recurse -Force |
        Where-Object { $_.LastWriteTime -gt $start -AND $_.LastWriteTime -lt $end } | 
        Select-Object @{Name='Path';Expression={$_.FullName}},@{Name='LastWriteTime';Expression={$_.LastWriteTime}},@{Name='Group/User';Expression={$Access.IdentityReference}},@{Name='Permissions';Expression={$Access.FileSystemRights}},@{Name='Inherited';Expression={$Access.IsInherited}}
} 

$Files | Export-Csv "<save-path>\Folder-Permissions-$((Get-Date).ToString("yyyy-MM-dd_HHmmss")).csv" -NoTypeInformation