如何使用powershell遍历驱动器中的所有目录
How to loop through all directories in a drive using powershell
我有下面的 powershell 脚本,它给我一个特定文件夹的权限。
在下面的脚本中,例如我可以获得名为 SP 的目录的每个文件夹(包括子文件夹)的权限,
如何遍历所有文件夹而不是特定的目标目录?
$targetServer = '\tst-server\f$\' #Enter hostname
$targetDirectory = 'SP' #Enter directory name
$target = Join-Path -ChildPath $targetDirectory -Path $targetServer
$arrResults = @() #Initialize array used to store custom object output
$exportPath = 'C:\Users\adt\Desktop\Scripts\output\FolderPermission.csv' #Enter name of the CSV output file
#Query target directory for all 'folders' (excludes files via Where statement)
Get-ChildItem -Recurse -Path $target | Where { $_.PSIsContainer } |
forEach {
$objPath = $_.FullName
$coLACL = Get-Acl -Path $objPath
forEach ( $objACL in $colACL ) {
forEach ( $accessRight in $objACL.Access ) {
$objResults = New-Object –TypeName PSObject
$objResults | Add-Member –MemberType NoteProperty –Name DirectoryPath –Value $objPath
$objResults | Add-Member –MemberType NoteProperty –Name Identity –Value $accessRight.IdentityReference
$objResults | Add-Member –MemberType NoteProperty –Name SystemRights –Value $accessRight.FileSystemRights
$objResults | Add-Member –MemberType NoteProperty –Name SystemRightsType –Value $accessRight.AccessControlType
$objResults | Add-Member -MemberType NoteProperty -Name IsInherited -Value $accessRight.IsInherited
$objResults | Add-Member -MemberType NoteProperty -Name InheritanceFlags -Value $accessRight.InheritanceFlags
$objResults | Add-Member –MemberType NoteProperty –Name RulesProtected –Value $objACL.AreAccessRulesProtected
$arrResults += $objResults
}
}
}
$arrResults | Export-CSV -NoTypeInformation -Path $exportPath
您只需将 Path
设置为 F:
Get-ChildItem F: -Recurse | Where { $_.PSIsContainer } | Foreach-Object {
#do something
}
我有下面的 powershell 脚本,它给我一个特定文件夹的权限。
在下面的脚本中,例如我可以获得名为 SP 的目录的每个文件夹(包括子文件夹)的权限,
如何遍历所有文件夹而不是特定的目标目录?
$targetServer = '\tst-server\f$\' #Enter hostname
$targetDirectory = 'SP' #Enter directory name
$target = Join-Path -ChildPath $targetDirectory -Path $targetServer
$arrResults = @() #Initialize array used to store custom object output
$exportPath = 'C:\Users\adt\Desktop\Scripts\output\FolderPermission.csv' #Enter name of the CSV output file
#Query target directory for all 'folders' (excludes files via Where statement)
Get-ChildItem -Recurse -Path $target | Where { $_.PSIsContainer } |
forEach {
$objPath = $_.FullName
$coLACL = Get-Acl -Path $objPath
forEach ( $objACL in $colACL ) {
forEach ( $accessRight in $objACL.Access ) {
$objResults = New-Object –TypeName PSObject
$objResults | Add-Member –MemberType NoteProperty –Name DirectoryPath –Value $objPath
$objResults | Add-Member –MemberType NoteProperty –Name Identity –Value $accessRight.IdentityReference
$objResults | Add-Member –MemberType NoteProperty –Name SystemRights –Value $accessRight.FileSystemRights
$objResults | Add-Member –MemberType NoteProperty –Name SystemRightsType –Value $accessRight.AccessControlType
$objResults | Add-Member -MemberType NoteProperty -Name IsInherited -Value $accessRight.IsInherited
$objResults | Add-Member -MemberType NoteProperty -Name InheritanceFlags -Value $accessRight.InheritanceFlags
$objResults | Add-Member –MemberType NoteProperty –Name RulesProtected –Value $objACL.AreAccessRulesProtected
$arrResults += $objResults
}
}
}
$arrResults | Export-CSV -NoTypeInformation -Path $exportPath
您只需将 Path
设置为 F:
Get-ChildItem F: -Recurse | Where { $_.PSIsContainer } | Foreach-Object {
#do something
}