【问题标题】:Powershell does not work properly on Windows 10Powershell 在 Windows 10 上无法正常工作
【发布时间】:2021-10-30 15:58:48
【问题描述】:

我有 Powershell 命令来访问 ACL 访问权限。

$folderPermissionList = (Get-Acl -path "C:\Program Files\Logs").Access | ?{$_.IdentityReference -match "$BUILTIN\\Users"}
If($folderPermissionList.FileSystemRights -match "FullControl")
{

& icacls.exe "C:\Program Files\Logs" /Q /T /remove "BUILTIN\Users"
}

在我的 Windows 10 PC 上执行此命令时,它被卡住并且没有输出。 但是当在 Windows 服务器 PC 上执行相同的命令时,它按预期工作,列出了权限列表。

我的要求是,需要获取特定文件夹的ACL列表并检查用户权限。

我不知道为什么它不在 Windows 10 操作系统上执行。有什么想法吗?

【问题讨论】:

  • 您是否在 Windows 10 客户端上以提升用户身份运行它?你在这两台机器上使用的是什么版本的 PowerShell?
  • “卡住”是什么意思?究竟发生在哪一行?你确定PowerShell卡住了,还是icacls.exe
  • 是的,我以提升的权限运行了脚本,但它卡在了 "& icacls.exe "C:\Program Files\Logs" /Q /T /remove "BUILTIN\Users"" 行中很久。 Powershell 版本为 5.1.19041.1151

标签: powershell windows-10


【解决方案1】:
Where IdentityReference -match "$BUILTIN\\Users"

错了。

您使用的是双引号字符串,这些字符串受变量插值的影响。如果您没有名为$BUILTIN 的变量,则上述将解析为\\Users。这看起来很有效,但可能比你想要的更多。

但如果您确实有一个名为$BUILTIN 的变量,那么所有的赌注都与它的最终结果有关。我猜你打算匹配字符串'BUILTIN\Users'

在 PowerShell 中编写正则表达式时,通常最好使用单引号字符串:

Where IdentityReference -match 'BUILTIN\\Users'

但更好的是 - 因为无论如何您都不是模式匹配,而是与固定字符串进行比较 - 这是这样的:

Where IdentityReference -eq 'BUILTIN\Users'

这很好用:

(Get-Acl -path "C:\Program Files").Access | Where IdentityReference -eq 'BUILTIN\Users'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2016-10-13
    相关资源
    最近更新 更多