Qual é a melhor maneira de converter esse comando complexo “takeown” em um script de desligamento?

0

Eu encontrei este comando aqui .

O comando é estruturado como uma modificação do registro que adicionará uma entrada "Aceitar Propriedade" no menu de contexto padrão do arquivo / diretório do Windows Explorer. Eu posso ver onde ele usa cmd.exe, e eu posso entender o que está acontecendo a partir daí.

A modificação do registro contém vários comandos, mas estou especificamente interessado no comando para apropriar-se e conceder permissões em uma árvore de diretórios:

[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="Grant Admin Full Control"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

Um dos problemas é que - por causa da maneira como o comando é executado - ele invoca explicitamente cmd.exe com a opção / C. Isso faz com que as seqüências de escape sejam necessárias para aspas (o que não entendi totalmente). O comando também contém tokens que não tenho idéia de como usar a partir da linha de comando ("takeown", "icacls", etc). Além disso, o comando é dividido em duas linhas separadas, com uma quebra de linha no meio - o que suponho que faria com que cmd.exe tentasse executá-lo como dois comandos separados, quando não parece ser assim.

Eu preciso converter o comando em um arquivo de script (um que não abra outra instância do cmd.exe - presumivelmente um lote), com um diretório explícito substituindo o "% 1". A única restrição neste ponto é que esse script precisa ser capaz de ser executado como um script de desligamento na Diretiva de Grupo local. Eu não confio em mim mesmo para fazer isso corretamente, já que tenho pouca compreensão da sintaxe usada nessa modificação do registro. Como tal, é muito arriscado para mim tentar fazer isso sozinho. Quem sabe o dano que eu poderia causar se eu entendi errado a sintaxe.

Portanto, estou perguntando se alguém pode me apontar na direção certa - pontos de bônus para exemplos explícitos.

    
por Giffyguy 09.09.2009 / 12:23

1 resposta

2

takown e isacls são comandos do DOS. Como não há nenhum caminho especificado para alcançá-los no arquivo do Registro, presumo que eles estejam disponíveis no caminho.

Basta criar um arquivo de lote (digamos ownandgrant.bat) contendo

@echo off
takeown /f %1 /r /d y 
icacls %1 /grant administrators:F /t

Isso pode causar problemas se o nome do diretório contiver 1 ou mais espaços, por isso, certifique-se de incluir o diretório entre aspas duplas ao chamar o arquivo em lote.

ownandgrant.bat "my special directory"
    
por 09.09.2009 / 12:56