Powershell - Clonagem de ACL's para toda a unidade - Log de Erros?

3

Estou migrando todos os dados de um volume (1 TB) (não C :) em um servidor AD para um novo 4 TB. Eu copiei todos os dados, incluindo as coisas FolderRedirection e Profile.

Estou apenas no processo de clonagem da ACL de segurança com um pouco de PowerShell. Alguém pode me apontar na direção certa sobre como registrar a saída em um arquivo para que eu possa analisá-lo e garantir que nada falhe?

copypermissions.ps1

dir E:\Data -r | where {$_.PSIsContainer} | foreach { 
  $target= ($_.fullname).replace("E:","G:") 
  Get-Acl $_.Fullname | Set-Acl $target 
} 

Usar o sinalizador -whatif no final do comando Set-Acl mostra que ele tentará e fará o que eu quiser também, mas quando eu o executo em uma pasta de teste nem tudo é copiado e recebo alguns erros no console parecendo:

Set-Acl : The security identifier is not allowed to be the owner of this object.

At E:\copypermissions.ps1:3 char:32 + Get-Acl $_.Fullname | Set-Acl <<<< $target + CategoryInfo : InvalidOperation: (G:\Data\Profiles*USERNAME*:String) [Set-Acl], InvalidOperationException + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetAclCommand

Estou realmente procurando um simples 1 liner para adicionar ao final do script que irá gravar qualquer erro em um arquivo de log.

    
por JTotham 11.03.2012 / 18:59

3 respostas

3

Para redirecionar apenas erros de stederror para um fluxo de saída regular, coloque 2> (filename) no final da sua consulta. Então, torna-se:

dir E:\Data -r | where {$_.PSIsContainer} | foreach { 
  $target= ($_.fullname).replace("E:","G:") 
  Get-Acl $_.Fullname | Set-Acl $target 
} 2> errors.txt
    
por 11.03.2012 / 20:36
3

Robocopy é um utilitário de cópia incluído nas versões recentes do Windows (anteriormente era uma ferramenta de kit de recursos que você precisava baixar). Ele copiará seus arquivos e as ACLs quando determinados switches estiverem ativados.

Para copiar uma árvore de pastas inteira com segurança da unidade antiga para a nova, você executaria o seguinte comando em um prompt de comando ou na janela do powershell com direitos de administrador:

Robocopy \source \destination /MIR /SEC /ZB

Você também pode executar o Robocopy de uma maneira que apenas aplique segurança a arquivos sem copiar dados.

Robocopy \source \destination /SECFIX

Para obter mais informações sobre o Robocopy, você pode examinar as seguintes fontes: link - Explicação dos switches da linha de comando do Robocopy link - Explicação da opção / SECFIX

    
por 11.03.2012 / 19:05
0

Usando o Robocopy (versão do kit sem recurso), você pode siga este guia .

A sintaxe correta é ROBOCOPY /E /Copy:S /IS /IT <Source> <Target> .

    
por 11.03.2012 / 20:13