如何使用 powershell 向 windows 命名管道添加权限?

如何使用 powershell 向 windows 命名管道添加权限?

如何使用 powershell 脚本为特定组添加从现有命名管道读取/写入的权限?

这是我到目前为止所做的事情:

$AccessRule = New-Object System.IO.Pipes.PipeAccessRule( "Users", "FullControl", "Allow" )
$PipeSecurity = [System.IO.Directory]::GetAccessControl("\\.\pipe\docker_engine")
$PipeSecurity.AddAccessRule($AccessRule) 

抛出错误

无法将参数“rule”(值为:“System.IO.Pipes.PipeAccessRule”)从“AddAccessRule”转换为类型“System.Security.AccessControl.FileSystemAccessRule”

答案1

$account="<DOMAIN>\<USERNAME>"
$npipe = "\\.\pipe\docker_engine"                                                                                 
$dInfo = New-Object "System.IO.DirectoryInfo" -ArgumentList $npipe                                               
$dSec = $dInfo.GetAccessControl()                                                                                 
$fullControl =[System.Security.AccessControl.FileSystemRights]::FullControl                                       
$allow =[System.Security.AccessControl.AccessControlType]::Allow                                                  
$rule = New-Object "System.Security.AccessControl.FileSystemAccessRule" -ArgumentList $account,$fullControl,$allow
$dSec.AddAccessRule($rule)                                                                                        
$dInfo.SetAccessControl($dSec)

答案2

虽然 Ben 的解决方案确实有效,但是每当 Docker 守护进程重新启动时,访问规则就会丢失。

但是对于 Docker 来说有一个永久性的修复方法:创建包含以下内容的
文件:%programdata%\docker\config\daemon.json

{
    "group": "Users"
}

这允许 Windows 组中的所有用户Users无需管理员权限即可打开命名管道。

最好的一月


这是文档

-G, --group 字符串 | unix 套接字的组(默认“docker”)

它说的是“unix套接字”,但也适用于命名管道。

默认组似乎是docker,但守护进程不会创建它。而 Docker Desktop 会创建一个名为 的组docker-users

相关内容