簡體   English   中英

您如何獲得 powershell 以列出目錄中文件夾的權限,同時忽略具有訪問權限的組?

[英]How can you get a powershell to list the permissions of folders within a directory while ignoring groups that have access?

我對 Powershell 還是比較陌生,並且一直在斷斷續續地研究這個問題。

我們有幾個共享驅動器,我正在嘗試查找有權訪問其中文件夾但忽略組和任何系統用戶的所有個人用戶的列表。

到目前為止,這是我一直在嘗試使用的方法(使用最簡單的方法,在我的桌面上進行測試)

 Get-ChildItem -Path "C:\Users\default\Desktop\TestFolder" -Directory |
  Get-ACL  |
  Where IdentityReference -notlike "NT AUTHORITY\SYSTEM" |
   Format-Table -Wrap

這不會隱藏“TestFolder”中文件夾的 output 中的“NT AUTHORITY\SYSTEM”。 我已經嘗試了幾次迭代/不同的方式來解決 go 但仍然遇到同樣的問題。

我也不知道如何對 output 隱藏群組。

我將不勝感激任何幫助!

繼續我的評論......

解決方案是擴展Access的正確屬性,然后按IdentityReference的屬性進行過濾; 因為這只是一個子屬性

Get-ChildItem -Path "C:\Users\default\Desktop\TestFolder" -Directory | 
    Get-Acl |
    ForEach-Object -Begin `
    {
        $toExclude = "NT AUTHORITY\\SYSTEM|BUILTIN\\"
    } -Process `
    {
        $Directory = $_.Path.Replace("Microsoft.PowerShell.Core\FileSystem::","") 
        $_ | Select-Object -ExpandProperty "Access" | Where-Object -Property "IdentityReference" -NotMatch $toExclude |
            Add-Member -MemberType "NoteProperty" -Name "Directory" -Value $Directory -PassThru
    }

在這里,我們利用| $toExclude中表示要對我們的-NotMatch運算符使用的 "" 值的分隔。

  • -NotMatch運算符使用正則表達式(也稱為/縮寫為RegEx ),這允許我們使用這樣的分隔符。
  • 就像函數中的Begin塊一樣,它只會對整個表達式/命令運行一次。 如果您不打算將它放在命令之前,那么將$toExclude之類的准備工作放在那里是理想的選擇。
  • Process塊將在管道中object 運行一次,這與Begin塊不同,這就是我們在代碼中放置邏輯的地方。

在過濾掉不需要的值后,使用Add-Member ,我們可以通過在Path的管道屬性中引用當前的 object 添加當前目錄,將其添加回 object,並使用-PassThru將其向下傳遞到管道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM