Usando o XCACLS para definir permissões com nomes extensos de arquivos

1

Precisamos definir permissões nos diretórios dos usuários em um Windows 2000 Server. Isso acontece com regularidade suficiente e eles também devem ser definidos na ordem abaixo ou os backups são desativados. Este é o script básico:

XCACLS foldername /g Administrators:OF /T /C /Y  
XCACLS foldername /E /g "DOM\Enterprise Admins":OF /T /C /Y  
XCACLS foldername /E /g SYSTEM:OF /T /C /Y  
XCACLS foldername /E /g STAFF\username:ORWEDC /T /C /Y  

Meu problema é que esse script não funciona em todos os arquivos de alguns diretórios. Os arquivos que parecem falhar são nomes extensos de arquivos e diretórios profundamente aninhados.

Alguém sabe de um script que não se importa com nomes de arquivos longos e leva grandes caminhos em seu ritmo?

Eu encontrei um script XCACLS.vbs da Microsoft, mas ele funciona de forma diferente e eu não tenho certeza se ele funciona com esses nomes de arquivos grandes também.

    
por Seanchán Torpéist 12.05.2009 / 17:54

1 resposta

4

Existe um limite de cerca de 260 caracteres no tamanho dos nomes dos ficheiros, no entanto, existe uma forma massiva e perspicaz para contornar este problema: -)

O limite está no subsistema Win32 não no kernel. Se você prefixar um nome de arquivo com \? \ Isso faz com que o subsistema Win32 passe o nome diretamente para o kernel sem qualquer pré-processamento, e o limite não se aplica. O kernel ainda tem um limite, mas é algo bobo como 65.553 caracteres.

Então, enquanto:

xcacls C:\verylongname.txt

não funciona, você deve encontrar:

xcacls \?\C:\verylongname.txt

funciona. Se você estiver usando um nome UNC, a sintaxe é:

xcacls \?\UNC\server\share\verylongname.txt

NB isto só funciona com nomes totalmente qualificados, ou seja, começando com uma letra de unidade. Não funciona com todos os aplicativos de linha de comando do Windows, mas funciona com muitos.

    
por 13.05.2009 / 18:03