检索在 powershell 中的日期范围内修改的文件的完整路径和文件权限
Retrieve full path and file permissions of file modified between date range in powershell
考虑到这是我第一次 post 使用 Whosebug,对 PowerShell 还很陌生;我希望你们的回复都温和一点。
我正在尝试在一个巨大的生产服务器的日期范围内修改内容。我希望将内容导出到一个 .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
这里有一些屏幕截图可以提供更好的创意:
当前输出:
期望的输出:
非常感谢任何帮助,在此先致谢!
此致,
曼尼
我想是 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
考虑到这是我第一次 post 使用 Whosebug,对 PowerShell 还很陌生;我希望你们的回复都温和一点。
我正在尝试在一个巨大的生产服务器的日期范围内修改内容。我希望将内容导出到一个 .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
这里有一些屏幕截图可以提供更好的创意:
当前输出:
期望的输出:
非常感谢任何帮助,在此先致谢!
此致,
曼尼
我想是 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