web-dev-qa-db-ja.com

PowerShellを介して、マップされたホームフォルダーの所有権をユーザーに再付与します

Windows 2008マシンのユーザー割り当てを変更した後、一部のユーザーから、マップされたホームフォルダーの読み取りはできたが書き込みはできなかったと報告されました。サーバーマネージャーでホームフォルダーのパスを再入力し、デフォルトのプロンプトを受け入れると...

"The \\server\folder home folder already exists. Do you want this user to be granted full control on this folder?"

...問題は解消されます。

  1. Powershellで同じことを行う方法はありますか?スクリプトは、ユーザーがアクセス許可を持っているかどうかを確認し、持っていない場合はそれらを再割り当てしますか?

  2. 完全なアクセス許可を持っていない人を特定するために、所有者と一緒にフォルダーのアクセス許可を一覧表示するのはどうですか?私はこの2番目の質問に数時間を費やし、結果はまちまちでした。

次のスクリプトは、権限が一致しないフォルダを一覧表示していないようです。

get-acl "D:\users\*" | select Path -Expand Access | where
{ $_.Identityreference -notcontains 'NT AUTHORITY\SYSTEM' 
-and $_.Identityreference -notcontains 'CREATOR OWNER' 
-and $_.Identityreference -notcontains 'BUILTIN\Administrators' 
-and $_.Identityreference -notcontains 'BUILTIN\Users' 
-and $_.Identityreference -notcontains 'BUILTIN\Account Operators' 
-and $_.Identityreference -notcontains 'BUILTIN\BUILTIN\Users'} | 
select @{Expression={$_.path};Label="Folder"},
@{Expression={$_.IdentityReference};Label="User"},
@{Expression={$_.AccessControlType};Label="Permissions"} |
Format-Table -Wrap -AutoSize
2
Bourne

ADでホームフォルダを設定しているので、ADUCと変数を使用して再割り当てしてみませんか?

あなたのフォルダがあなたのユーザー名として名前が付けられているとしましょう

ビューをフィルタリングして、現在ホームフォルダに値が設定されているユーザーのみを表示できます。

更新するすべてのユーザーを選択し、それらのユーザーのプロパティに移動してから、[Profile]タブに移動します。

ホームフォルダのパスを次のように入力します。

\\<servername>\Home Folders\%USERNAME%

そして大丈夫を打つ。個々のユーザー名を使用して、各フォルダーのアクセス許可を循環してリセットします。

パスに一致するようにパスを変更する必要がありますが、重要な部分は%USERNAME%です。

1
HostBits

フォルダまたはファイルの所有権を確認するには、GetOwnerメソッドを使用できます。

$acl = Get-Acl $dir.fullname
$acl.GetOwner([System.Security.Principal.NTAccount])

そして、新しい所有者を次のように設定します。

$objUser = New-Object System.Security.Principal.NTAccount("YourDomain", "YourUser")
$acl.SetOwner($objUser)
2
Sven

これは役立つかもしれません。しばらく前に採用した共有フォルダー構成のアクセス許可を修正する必要がありました。 powershellとsubinacl.exeを使用する(所有者をリモートで変更することはあまり機能しないため)。これはクリーンアップにも使用されたため、無効または削除されたユーザーアカウントフォルダーの名前を変更するための追加のコードがここにあります。これもQuestコマンドレットを使用する古いスクリプトであり、ネイティブADコマンドレットに置き換えることができます。

Add-PSSnapin quest*

$dirlist = gci \\server\share | ? { $_.PSIsContainer }

$subinacl = "C:\utils\subinacl.exe"
foreach ($userdir in $dirlist)
        {

#the foldername was a funny format (citrix 2008 profile with .2k8 suffix)
           $username = $userdir.name.Split('.')[0]
            $adaccount = Get-QADUser $username

            If (($adaccount.AccountIsDisabled -eq $TRUE) -or (!$adaccount))
                {
                    write-Host "$username is not a current employee"
                    #rename folder to _DEL_originalname
                    $newname = "_DEL_$username"
                    rename-item -path $userdir -newname $newname
                }
            Else
                {
                #get full path            
                Write-Host "$userdir - changing permissions"
                $currentDir = $userdir.FullName # this way you don't duplicate the start folder

                #get ACL of folder
                $acl = Get-Acl $currentDir
                If ($acl.access -notcontains $username) {

                    #variable to set new permissions for username of folder           
                    $permission = "domain\$username",”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow”

                    $accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission

                    #actually set the permissions
                    $acl.SetAccessRule($accessRule)
                    Set-Acl $currentDir $acl

                    #use subinacl to set owner at parent level and below
                    $params1 = "/file $currentDir /setowner=domain\$username"
                    $params2 = "/subdirectories $currentDir\*.* /setowner=domain\$username"
                    $params3 = "/subdirectories $currentDir\* /grant=domain\$username"
                    $params4 = "/subdirectories $currentDir\* /grant=domain\administrators=F"
                    Invoke-Expression "$subinacl $params1" | out-null
                    Invoke-Expression "$subinacl $params2" | out-null
                    Invoke-Expression "$subinacl $params3" | out-null
                   }
                }
        }
1
Jordan W.