alterar recursivamente as janelas do proprietário 7


95

De alguma forma, defini acidentalmente todos os arquivos em uma subpasta para "No Owner 'e não consigo alterar todas as permissões. Posso alterar um manualmente alterando o proprietário e depois definindo as permissões, mas como posso alterar o proprietário de todos os arquivos neste diretório de uma só vez?

Respostas:


92

Use takeownno prompt de comando para se apropriar de uma pasta, todas as suas subpastas e arquivos recursivamente:

takeown /f "c:\folder\subfolder" /r

Isso funciona bem, mas se você não executar o console da linha de comando como administrador, poderá ocorrer uma falha nos arquivos que você não possui.


105

Para corrigir permissões realmente quebradas, o melhor é executar esses dois comandos um após o outro:

takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T

O primeiro dará a você a propriedade de todos os arquivos, no entanto, isso pode não ser suficiente, por exemplo, se todos os arquivos tiverem permissões de leitura / gravação / execução definidas como "negar". Você possui os arquivos, mas ainda não pode fazer nada com eles.

Nesse caso, execute o segundo comando, que corrigirá as permissões quebradas.


3
Excelente consultoria técnica ... sua solução foi a única que funcionou. Obrigado novamente.
carrabino

4
Melhor conselho, é preciso usar o takeown e o icacls.
Gnac

2
/ Uma opção é útil se você deseja atribuir 'propriedade ao grupo de administradores em vez do proprietário atual'. Você precisa ter privilégios de administrador para fazer isso. Pode ser necessário abrir a janela do cmd usando ctrl-shift-enter.
precisa saber é o seguinte

4
Eu adicionei o /D Yparâmetro para takeownque ele confirme automaticamente diretórios recorrentes para os quais você não tem permissões de 'list directory'.
Jeroen Wiert Pluimers

3
@JeroenWiertPluimers, embora seja um bom conselho que eu tenha removido de edição como é (estupidamente suficiente) um parâmetro localizada assim por diante Inglês do Windows será /D Y, por um francês /D O, talvez em espanhol /D S, etc.
laurent

26

Observe que o cacls está obsoleto (desde o Windows Vista?) E recomenda o uso icacls.

Este comando redefinirá recursivamente as permissões em uma pasta:

icacls "C:\path\to\folder" /reset /T

5

Você pode usar caclsno prompt de comando:

cacls "C: \ caminho \ para \ pasta" / E / T / C / G "Administrador": F

O /Tinterruptor permite que ele funcione recursivamente. Substitua Administratorpelo usuário ao qual você deseja conceder permissões.


1

Eu tive problemas com arquivos com caminhos muito longos (maiores que 256 caracteres). Os dois comandos

takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T

funcionou, exceto por esses arquivos com nomes e caminhos muito longos. Acabei renomeando

"C:\path\to\really_long_folder_name"

para

"C:\path\to\r"

e depois correndo

takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q

após o que eu poderia renomear as pastas para algo mais sensato. takeown / DY responde sim a prompts. Para icacls, usei / grant para fornecer acesso total a todos (como eu estava apenas tentando acessar dados em um disco rígido de um PC morto), com / t para processar subpastas e arquivos, / q para executar no modo silencioso (ocultar sucessos) e / c para mostrar erros. Repeti o processo, renomeando pastas até que todas as permissões dos arquivos fossem atualizadas com sucesso.

Espero que isso ajude alguém que tenha encontrado erros semelhantes aos erros "falha na enumeração de objetos no acesso ao contêiner" "que eu estava recebendo ao tentar obter acesso aos dados de um disco rígido antigo.


0

Obrigado @ this.lau_ pela dica / reset, é exatamente isso que eu precisava para concluir meu script para tomar posse do CSC e fazer um backup dele. Após assumir a propriedade de C: \ Windows \ CSC, as permissões tendem a ficar muito inconsistentes em relação à herança - a opção / reset corrigiu isso diretamente para mim.

Function Copy-CSCData {
    $Datetime = Get-Date -Format yyyyMMdd.hhmmss
    $LogPath = 'PATH TO LOG'
    $CSCSource = 'C:\Windows\CSC\v2.0.6\namespace'
    $Dest = 'DESTINATION PATH'
    $icaclsource = "\\?\" + $CSCSource

    $CSCLogfile = "$LogPath\" + "$Datetime" + "_CSCRobocopy.log"

    icacls.exe $icaclsource /reset /T
    icacls.exe $icaclsource /grant :r "Everyone:(OI)(CI)F"

    Robocopy $CSCSource $Dest /Copy:DATSO /E /XO /Z /LOG+:$CSCLogfile /V /FP /NP /R:2 /W:2 /XF "~$*","*.tmp"
}

@ Williams Williams - se você verificar a variável $ icaclsource acima, notará que eu adiciono "\? \" Na frente do caminho da fonte. Ao adicionar isso na frente, ele aceitará nomes de arquivos mais longos. Este também é um problema que tive, mas isso foi corrigido! Felicidades.

Josh


Bem-vindo ao Super Usuário! Apenas informando que os usuários que efetuam "ping" funcionam apenas nos comentários das postagens, não nas postagens reais. Infelizmente, você não pode comentar em outras postagens além das suas ou nas respostas às suas perguntas até ter mais de 50 reputação . Consulte Como funcionam os comentários @ respostas? . Observe que você não pode simplesmente executar ping em alguém em um comentário. Somente o autor da postagem e qualquer outro usuário que já tenha comentado.
robinCTS
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.