如何组合两个Powershell命令列出文件夹和ACL

时间:2018-04-12 17:46:55

标签: powershell

我运行了单独的Powershell命令,一个获取特定级别的所有文件夹列表,另一个列出所有文件夹和关联的ACL。我想把它组合起来只列出" 3级"文件夹及其关联的ACL。 3级文件夹的命令是:

    Get-ChildItem "I:" -Recurse -Directory | Where-Object {$_.FullName.split("\").count -le 4} | ForEach-Object FullName 

文件夹ACL的命令是:

    Get-ChildItem j:\ -Recurse | where-object {($_.PsIsContainer)} | Get-ACL | Format-List 

我试过了:

    Get-ChildItem I:\ -Recurse | where-object {($_.PsIsContainer)} | Where-Object {$_.FullName.split("\").count -le 4} Get-ACL | Format-List

但是得到了错误Where-Object:找不到接受参数的位置参数' Get-ACL'。

提前感谢您的帮助!使用PS 5.1,顺便说一句。

3 个答案:

答案 0 :(得分:1)

您可以使用管道完成此操作。只需将第一组命令的输出直接传递到Get-ACL cmdlet,就像这样。

$path = "I:\"
Get-ChildItem -Path $path -Recurse -Directory | `
    Where-Object {$_.FullName.split('\').count -le 4} | `
    Select-Object -ExpandProperty FullName | `
    Get-ACL | `
    Format-List

答案 1 :(得分:0)

我认为你在|之后错过了一个竖线字符(Where-Object)。

答案 2 :(得分:0)

这有效:

dir "I:"  -Recurse -ea silentlycontinue | where { $_.PsIsContainer -and $_.FullName.split("\").count -le 5} | % { $path1 = $_.fullname; Get-Acl $_.Fullname | % { $_.access | where { !$_.IsInherited } | Add-Member -MemberType NoteProperty -name "Path" -Value $path1 -passthru }}

感谢您的回复!