如何使用 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
。