Re-fornecer aos usuários a propriedade de suas pastas domésticas mapeadas via powershell

2

Alterei a cota do usuário em uma máquina do Windows 2008 e, depois disso, alguns usuários relataram que conseguiram ler, mas não escrever, em suas pastas base mapeadas. Se eu entrar novamente no caminho da Pasta Pessoal no Gerenciador de Servidores e aceitar o prompt padrão de ...

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

... o problema desaparece.

  1. Existe uma maneira de fazer a mesma coisa com o Powershell, onde o script verificará se o usuário tem as permissões e, se não, as reatribui?

  2. Que tal listar as permissões da pasta junto com o proprietário para identificar quem não tem permissões completas? Passei algumas horas nessa segunda pergunta com resultados mistos.

O seguinte script não parece listar pastas com permissões incompatíveis.

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
    
por Bourne 16.02.2012 / 00:04

3 respostas

1

Como você está configurando as pastas Início no AD, por que não apenas redistribui usando ADUC e variáveis?

Digamos que suas pastas sejam nomeadas como seus nomes de usuário

Você pode filtrar a visualização para mostrar apenas os usuários que atualmente têm um valor definido para sua pasta pessoal.

Selecione todos os usuários que você deseja atualizar e acesse as Propriedades desses usuários, em seguida, a guia Profile .

Digite o caminho da pasta base como tal:

\<servername>\Home Folders\%USERNAME%

e, em seguida, clique em OK. Ele irá percorrer e redefinir as permissões para cada pasta usando seus nomes de usuário individuais.

Você precisará alterar o caminho para corresponder ao seu caminho, mas a parte importante é o %USERNAME% .

    
por 16.02.2012 / 23:11
2

Para verificar a propriedade de uma pasta ou arquivo, você pode usar o método GetOwner:

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

E defina o novo proprietário com:

$objUser = New-Object System.Security.Principal.NTAccount("YourDomain", "YourUser")
$acl.SetOwner($objUser)
    
por 16.02.2012 / 14:21
1

isso pode ajudar. Eu tive que corrigir permissões em uma configuração de pasta compartilhada que adotei há algum tempo. Usando o powershell e o subinacl.exe (porque alterar proprietário remotamente não funciona com freqüência). isso também foi usado para fazer alguma limpeza, então há algum código extra aqui para renomear pastas de contas de usuário desabilitadas ou excluídas. É um script antigo que também usa os cmdlets do Quest, que podem ser substituídos pelo cmdlet nativo do AD agora.

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
                   }
                }
        }
    
por 16.02.2012 / 17:34