Powershell输出

标签 powershell

无法从某些 powershell 命令获取我想要的输出。我正在创建一个 powershell 脚本来帮助清理主目录。我需要获取目录的权限,并确保目录的名称和有权访问的用户匹配。

我正在使用 Get-Acl 函数,它有很多额外的数据。理论上,这些目录上的文件权限应该以管理员为所有者,该用户应该是访问权限下列出的唯一人员。

PS C:\> Get-Acl "\\fs1\home\e55555"
Directory: \\fs1\home
Path                       Owner                      Access
----                       -----                      ------
e55555                    BUILTIN\Administrators     DOM\e55555 Allow ...

我想过滤掉除正在访问的内容之外的所有内容。我尝试过管道|选择访问但它没有给我相同的输出。

我知道除了 UserID 之外我还会有额外的信息,所以我想我可以写入一个文件并尝试“grep”我需要的内容。通过一些谷歌搜索和实验,我得到了一些我认为很容易解析的输出,这是命令和输出:

PS C:\> $test = Get-Acl \\fs1\home\\e55555 | Select-Object -ExpandProperty Access
 | select IdentityReference

IdentityReference
-----------------
DOM\e55555
NT AUTHORITY\SYSTEM
BUILTIN\Administrators
NT AUTHORITY\Authenticated Users

尝试使用正则表达式来查找我想要的行,但我尝试过的所有操作都没有给我任何输出。我尝试了下面命令的不同变体,并尝试解析文件而不是变量:

echo $test | Select-String -pattern "^DOM"
[regex]::matches($test,"^DOM")

那么如何减少 get-acl 命令的输出呢?如何在没有额外数据的情况下“grep”任何以 DOM 开头的行?

最佳答案

这应该为您提供域中所有用户的访问对象

$path = "\\fs1\home\\e55555"
(Get-Acl $path).Access | where { $_.IdentityReference -like "DOM*"}

如果您想检查用户是否在其中,您可以使用:

$path = "\\fs1\home\\e55555"
$username = $path | Split-Path -Leaf

(Get-Acl $path).Access | where { $_.IdentityReference -like "DOM\$username"}

我没有提取 Identityreference 属性,因为如果您想检查权限,则需要整个访问对象。如果将 Get-Acl 输出保存到变量(例如 $access = Get-Acl ......),您可以检查用户是否拥有使用 if($access) { do some }

访问规则

编辑:只是作为一个想法。如果您只想要与文件夹同名的用户没有访问规则的文件夹(不检查用户拥有什么样的权限),您可以尝试:

$acls = Get-ChildItem "\\fs1\home\" | Get-Acl 
foreach ($acl in $acls) {
    $users = $acl.Access | select -ExpandProperty IdentityReference
    $username = $acl.PSChildName
    if ($users -notcontains "DOM\$username") { $username }
}

这应该输出一个文件夹名称数组(例如“e55555”),其中出现错误(例如用户“e55555”对文件夹“e55555”没有任何访问权限)。

关于Powershell输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265590/

相关文章:

powershell - 安装其他安装程序?

Powershell 跳过数组中的元素,如果它为空

windows - 写输出-InputObject(,'Test')-NoEnumerate

powershell - 如何使用 PowerShell 将 HTTP 请求版本更改为 1.0

powershell - 在powershell中打开程序并获取其句柄

powershell - 使用 PowerShell 限制 csv 列长度

PowerShell $PROFILE、变量和 NoteProperty/Add-Member

Powershell - 当我使用 '>' 时,回车符插入到输出中

regex - 需要使用PowerShell从长配置文件中搜索一行

powershell - 使用 powershell 通过 lync 发送消息