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) 

エラーをスローする

「AddAccessRule」の引数「rule」(値:「System.IO.Pipes.PipeAccessRule」)を「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

関連情報