Utilizando PowerShell em File Server
Depois de muitos anos afastado de migrações e configurações envolvendo file server, precisei efetuar algumas configurações e planejar a migração. Eu já tinha uma planilha que utilizei no passado, mas estava muito básica, então aproveitei a oportunidade para criar tudo com o PowerShell.
Cópia dos dados
A cópia dos dados é bem importante, por que a ideia não é apenas copiar e colar, pois além dos dados, precisamos migrar os atributos das pastas, como as permissões, por exemplo. Eu utilizei o robocopy e basicamente temos o comando robocopy ORIGEM DESTINO [comandos].
robocopy 'U:\USUARIOS\ricardo.conzatti' '\\S4C-FS01\U$\USUARIOS\ricardo.conzatti' /E /ZB /COPYALL /V /R:0 /W:0
Com o comando acima vamos efetuar a criação da pasta ricardo.conzatti no servidor de destino copiando os arquivos e sub-diretórios no modo backup, mantendo as informações dos arquivos e pastas, além de exibir os arquivos que não forma copiados. Em caso de falha a cópia não será repetira. Vamos detalhar um pouco mais cada um dos atributos utilizados:
- /E cópia dos sub-diretórios;
- /ZB modo Backup;
- /COPYALL cópia de todas as informações do arquivo;
- /V exibe os arquivos que por alguma razão não foram copiados;
- /R:0 não repete a cópia em caso de falha (substitua o 0 pelo número de tentativas);
- /W:0 por não repetir a cópia em caso de falha também não há tempo de espera entre as repetições (substitua o 0 pelo tempo de espera entre as tentativas.
É comum efetuar a primeira cópia e alguns arquivos não serem copiados, geralmente isso ocorre se o arquivo está aberto. Neste caso é possível realizar uma outra cópia, mas se utilizarmos o comando acima novamente, ele irá ignorar tudo o que já foi copiado e irá efetuar a cópia do zero. Então a ideia aqui é utilizar o mesmo comando robocopy, mas copiando apenas os arquivos, pastas e permissões que não estão no servidor de destino, de fato uma cópia diferencial.
robocopy 'U:\USUARIOS\ricardo.conzatti' '\\S4C-FS01\U$\USUARIOS\ricardo.conzatti' /E /NFL /NDL /NS /NC /NJH /NJS /R:0 /W:0
Vamos detalhar um pouco mais cada um dos atributos utilizados:
- /NFL não registra nomes de arquivos
- /NDL não registra nomes de diretórios
- /NS não registra os tamanhos dos arquivos
- /NC não registra classes de arquivos
- /NJH nenhum cabeçalho de trabalho
- /NJS nenhum resumo do trabalho
Abra o prompt de comando ou o PowerShell e digite robocopy /? para ver todos os comandos disponíveis.
Compartilhamento de Pastas
Um passo que precisamos fazer quando estamos migrando file servers é compartilhar as novas pastas no servidor de destino, neste caso vamos utilizar o comando New-SmbShare. Uma observação interessante é que se você adicionar o $ junto com o nome do compartilhamento ele ficará oculto (ex: -Name ‘ricardo.conzatti$’).
New-SmbShare -Name 'ricardo.conzatti' -Path 'U:\USUARIOS\ricardo.conzatti' -ContinuouslyAvailable $True -FolderEnumerationMode AccessBased -CachingMode None
O principal aqui é o -Name e -Path que são autoexplicativos. Os outros comandos eu utilizei por que o file server em questão faz parte de um cluster de alta disponibilidade com Failover Cluster e Storage Replica e todos os compartilhamentos foram configurados com EAB (escrevi um post sobre DFS Namespace e EAB). Se este não for o caso do seu ambiente, pode ignorar as opções abaixo:
- -ContinuouslyAvailable $True habilita a alta disponibilidade no compartilhamento;
- -FolderEnumerationModeAccessBased habilita o EAB;
- -CachingMode None desabilita o cache.
Outro comando interessante é o Grant-SmbShareAccess para configurar a permissão de acesso no compartilhamento criado. Neste exemplo vamos das a permissão de leitura para o grupo GG_USERS do domínio S4C. Pode
Grant-SmbShareAccess -Name 'ricardo.conzatti' -AccountName 's4c\GG_USERS' -AccessRight READ -Confirm:$false
É possível utilizar o comando Get-SmbShare para listar todos os compartilhamentos existentes e Remove-SmbShare para remover o compartilhamento indicado (Remove-SmbShare -Name ‘ricardo.conzatti’ -Force:$True). Bem intuitivo, não?
Permissão nas Pastas
Muitas vezes precisamos migrar as pastas e arquivos, mas para isso precisamos ter permissão ou em outros casos queremos mudar a permissão de algum grupo e/ou usuário em diversas pastas. Veja que aqui vamos adicionar permissões diretamente na pasta na aba security, diferentemente das permissões que vimos anteriormente que eram no compartilhamento. Para isso podemos utilizar o comando Add-NTFSAccess. É importante dizer que este comando não é nativo do PowerShell, por isso é necessário instalar o módulo (File System Security PowerShell Module) utilizando o comando no PowerShell em modo administrativo Install-Module -Name NTFSSecurity. Após instalar, basta executar o comando abaixo. Basicamente o comando adiciona a permissão de controle total na pasta ricardo.conzatti para o grupo GG_USERS.
Get-Item 'U:\USUARIOS\ricardo.conzatti' | Add-NTFSAccess -Account 's4c\GG_USERS' -AccessRights FullControl
Este módulo é bastante interessante, além do Add-NTFSAccess, é possível utilizar o Get-NTFSAccess para listar as permissões e o Remove-NTFSAccess para remover.
Cotas
É sempre importante limitar a utilização, caso contrário, o seu file server pode ser o seu pior pesadelo. Para isso, muitos sysadmin utilizam as cotas nas pastas. Obviamente podemos fazer isso utilizando o PowerShell com o comando New-FsrmQuota (para o comando funcionar você deve ter instalado o File Server Resource Manager). Com o comando abaixo estamos criando uma cota hard para a pasta ricardo.conzatti com o tamanho de 1GB.
New-FsrmQuota -Path 'U:\USERS\ricardo.conzatti' -Description 'Ricardo Conzatti' -Size 1GB
Lembrando que a cota hard irá exibir um erro se o usuário tentar copiar um arquivo e exceder o tamanho definido na cota, já a cota soft permite que o usuário utilize mais do que foi definido. Para criar uma cota soft, adicione o comando -SoftLimit. É possível utilizar o comando Get-FsrmQuota para listar as cotas existentes e também o comando Remove-FsrmQuota para remover uma cota.
Lembrem-se que todos os comandos tem muitas variações e provavelmente irão poder lhe ajudar em diversos casos. É isso aí pessoal, até mais!
One thought on “Utilizando PowerShell em File Server”
Muito bom.