
如何使用 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 socket”,但也適用於命名管道。
預設組似乎是docker
,但不是由守護程序創建的。 Docker Desktop 建立了一個名為docker-users
.