PDA

View Full Version : migrazione fileserver: batch e mantenimento permission


Stigmata
22-05-2009, 08:50
Ciao a tutti

Sto migrando alcuni fileserver e il problema principale è il mantenimento delle permission sulle cartelle. Ogni server ha una sola cartella condivisa (everyone / full control) al cui interno ci sono diverse cartelle opportunamente permissionate.

Tralasciando tools commerciali e tralasciando FSMT (che per qualche oscuro motivo non funziona), che io sappia rimane solo robocopy. Finora sono riuscito a produrre questo:

robocopy c:\documenti\nome_cartella \\nome_server\dati\nome_cartella /E /W:1 /R:10 /COPY:DATSO /LOG:nome_cartella.txt

che mi mantiene le permission. Il problema è che lo devo ripetere per ogni cartella interna allo share (e sono una 40ina), mentre se salgo di un livello mi saltano tutte le permission e non capisco perchè. Il comando credo sarebbe questo:

robocopy c:\documenti \\nome_server\dati /E /W:1 /R:10 /COPY:DATSO /LOG:log.txt

ovviamente il comando lo lancio dal server sul quale risiedono i dati.

Ora, cosa fareste? Qualcuno mi può indicare un prodotto free che faccia al caso mio, se esiste?
In alternativa, visto che comunque robocopy funziona, come posso fare per avere un batch generico che ricavi l'elenco delle cartelle persenti, lo salvi da qualche parte e poi lanci robocopy, con le opzioni sopra indicate, per ogni cartella rilevata?

cd\
cd documenti
dir /ad /b > elenco_cartelle.txt

e poi? Come lo passo a robocopy?

Spero di essere stato chiaro :stordita:

cata81
22-05-2009, 14:26
1a Prova che farei è mappare la destinazione come drive locale
2a Controlla che l'utente che utilizzi si anche l'owner di tutti i file i subdirectory di origine e che non ci siano files criptati
3a Io non lascerei lo share Everyone full ma Everyone R/W, stesso dicasi per le security, il full a nessuno, ho visto utonti giocare con in permessi e incasinare anche la roba d'altri...

Krelian
23-05-2009, 09:19
Ciao,

hai provato ad aggiungere l'opzione /Z quando lanci robocopy? Tale opzione dovrebbe proprio tornare utile per le copie via rete.

Per quanto riguarda scrivere un batch potresti usare un piccolo script vbs tipo questo :


'*** VARIABILI
Cartella_sorgente = "c:\documenti\"
Cartella_destinazione = "\\nome_server\dati\"
'*************

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim strDir
Set strDir = FSO.GetFolder(Cartella_sorgente)

For Each objFolder in strDir.SubFolders
Dim NomeFolder
NomeFolder = objFolder.Name
Dim strShell, WshShell
strShell = "robocopy.exe " & Chr(34) & Cartella_sorgente & NomeFolder & Chr(34) & " " & Chr(34) & Cartella_destinazione & NomeFolder & Chr(34) & " /E /Z /W:1 /R:10 /COPYALL /LOG:" & Chr(34) & NomeFolder & ".txt" & Chr(34)
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run strShell,, True
Set strShell = Nothing
Set WshShell = Nothing
Set NomeFolder = Nothing
Next

Set strDir = Nothing
Set FSO = Nothing


In sintesi si fa la lista delle sottocartelle di c:\documenti\ e per ognuna lancia il robocopy, scrivendo un log separato per ogni sottocartella.