PDA

View Full Version : Robocopy


LJT
23-09-2022, 11:25
Salve a tutti,

uso il comando robocopy da anni ma oggi ho trovato un problema anomale.
Ho schedulato in operazioni pianificate su un server W2k8 un batch che copia una cartella dal Pc A al Server di backup.
Tutto ciò per motivi di sicurezza in quanto non voglio che il Pc A abbia accesso diretto al Server di Backup.
Il comando che uso è il seguente:


robocopy x: \\192.168.1.1\backup /S /B /z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+:c:\logbackup.log /NFL /NDL

Dove x è una cartella mappata che puna al PC A.
Se lo esegui da riga di comando funziona perfettamente, ma se lo schedulo no. Mi viene restituito un errore che mi dice che il percorso sorgente non è stato trovato.

Se modifico in questo modo:

robocopy c:\temp \\192.168.1.1\backup /S /B /z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+:c:\logbackup.log /NFL /NDL


Funziona sia da operazioni pianificate che da prompt del dos.

Avete qualche suggerimento in merito.

Grazie

Kaya
23-09-2022, 12:39
Il problema è proprio la mappatura X che da operazioni pianificate non può esserci (non prende le informazioni via policy o altro)

se sostituisci x: con il percorso unc completo vedrai che funziona

LJT
23-09-2022, 13:15
Il problema è proprio la mappatura X che da operazioni pianificate non può esserci (non prende le informazioni via policy o altro)

se sostituisci x: con il percorso unc completo vedrai che funziona

Purtroppo ho già provato con il percorso unc ma continua a dirmi che non lo trova.

Grazie per la risposta.

deuterio1
23-09-2022, 22:27
Purtroppo ho già provato con il percorso unc ma continua a dirmi che non lo trova.

Grazie per la risposta.

Il task schedulato deve essere eseguito con i privilegi dell'utente che ha accesso alla rete e che sia in grado di autenticarsi su tutte le share coinvolte nella copia. Forse è anche necessario memorizzare le credenziali di accesso alle share nel Credential Manager di quell'utente. L'alternativa è piazzare un NET USE all'inizio dello script che si autentichi sulle share, ma comporterebbe lo scrivere le credenziali in chiaro, che è una cosa da evitare.

Ciao,
D

Kaya
24-09-2022, 07:09
Purtroppo ho già provato con il percorso unc ma continua a dirmi che non lo trova.

Grazie per la risposta.

Il fatto che dice che "non lo trova" ha due opzioni
1) L'utente con cui fai girare il processo NON hai i permessi
2) Usi il nome di rete anzichè l'ip e per qualche motivo il dns non risolve.

Posta qua lo script col path unc di rete anzichè la mappatura.

LJT
26-09-2022, 13:07
Il task schedulato deve essere eseguito con i privilegi dell'utente che ha accesso alla rete e che sia in grado di autenticarsi su tutte le share coinvolte nella copia. Forse è anche necessario memorizzare le credenziali di accesso alle share nel Credential Manager di quell'utente. L'alternativa è piazzare un NET USE all'inizio dello script che si autentichi sulle share, ma comporterebbe lo scrivere le credenziali in chiaro, che è una cosa da evitare.

Ciao,
D

Ciao,

sì l'utente ha pieno accesso al percorso del computer "sorgente" altrimenti il comando eseguito da dos non funzionerebbe. Difatti accedendo ad "X" dal computer da cui lancio il backup ho l possibilità di scrivere e eliminare file.

Grazie

LJT
26-09-2022, 13:18
Il fatto che dice che "non lo trova" ha due opzioni
1) L'utente con cui fai girare il processo NON hai i permessi
2) Usi il nome di rete anzichè l'ip e per qualche motivo il dns non risolve.

Posta qua lo script col path unc di rete anzichè la mappatura.

Ciao,

ho verificato e i due pc si "vedono" oltre che tramite ip, anche attraverso il nome DNS.

Di seguito lo script che funziona se eseguito da DOS

robocopy "x:" "\\192.168.2.1\backup\dati" /S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+"C:\LOG\Log.log" /NFL /NDL


Questo il codice utilizzando UNC, ma eseguendolo da DOS non funziona.


robocopy "\\192.168.2.10\dati" "\\192.168.2.1\backup\dati" /S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+"C:\LOG\Log.log" /NFL /NDL


Grazie

pps
26-09-2022, 15:21
Ciao,

ho verificato e i due pc si "vedono" oltre che tramite ip, anche attraverso il nome DNS.

Di seguito lo script che funziona se eseguito da DOS

robocopy "x:" "\\192.168.2.1\backup\dati" /S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+"C:\LOG\Log.log" /NFL /NDL


Questo il codice utilizzando UNC, ma eseguendolo da DOS non funziona.


robocopy "\\192.168.2.10\dati" "\\192.168.2.1\backup\dati" /S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+"C:\LOG\Log.log" /NFL /NDL


Grazie
Devo dire che ROBOCOPY, è un bel programma, ma negli anni ho notato che... come dire... a volte e un pò stronzo, sembra dotato di vita propria
Giusto per...
prova a copiare e incollare questo codice e fai un script,
prima però controlla il percorso locale dopo "SET _source"
ho dato per scontato che la cartella dati fosse in quella posizione, ma sicuramente sarà da correggere...
SETLOCAL
SET _source=C:\users\UTENTE\dati
SET _target=\\192.168.2.1\backup\dati
SET _options=/S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG "C:\LOG\Log.log" /NFL /NDL
ROBOCOPY %_source% %_target% %_options%
Pause
:end
exit

P.S. non ho controllato opzioni di copia, ma penso che tu sappia
quello che vuoi:D

Kaya
27-09-2022, 08:01
Questo il codice utilizzando UNC, ma eseguendolo da DOS non funziona.


robocopy "\\192.168.2.10\dati" "\\192.168.2.1\backup\dati" /S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+"C:\LOG\Log.log" /NFL /NDL


Grazie

Ottimo: se lo lanci da PROMPT dei comandi non funziona. che errore dà?

LJT
28-09-2022, 11:05
Devo dire che ROBOCOPY, è un bel programma, ma negli anni ho notato che... come dire... a volte e un pò stronzo, sembra dotato di vita propria
Giusto per...
prova a copiare e incollare questo codice e fai un script,
prima però controlla il percorso locale dopo "SET _source"
ho dato per scontato che la cartella dati fosse in quella posizione, ma sicuramente sarà da correggere...
SETLOCAL
SET _source=C:\users\UTENTE\dati
SET _target=\\192.168.2.1\backup\dati
SET _options=/S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG "C:\LOG\Log.log" /NFL /NDL
ROBOCOPY %_source% %_target% %_options%
Pause
:end
exit

P.S. non ho controllato opzioni di copia, ma penso che tu sappia
quello che vuoi:D

Riporto l'esito dell'esperimento.
Il batch se eseguito a mano funziona.
Se schedulato non funziona dando il solito errore:

Impossibile trovare il percorso specificato.

Ricordo che nello script come parametro sorgente ho inserito la mappatura di rete "X:" e non il percorso riportato sopra.


Grazie per la tua risposta.

LJT
28-09-2022, 11:42
Ottimo: se lo lanci da PROMPT dei comandi non funziona. che errore dà?

Mi sono accorto adesso che mi dava errore perché non avevo messo le virgolette nel percorso di destinazione.

Dunque rettifico:
Il comando sopra funziona sia da DOS che da operazioni pianificate.

Ma purtroppo c'è un ma.......
Il comando della copia in realtà è inserito dentro ad un programma vbscript.
Questo perché mi da la possibilità di aggiungere molte opzione come, ad esempio, la possibilità di cambiare la cartella destinazione in base al giorno della settimana, oppure l'invio del report di backup via email.


Vedrò di mettere in debug lo script per capire cosa accade, anche se in tanti anni di onorato servizio, non mi aveva mai dato nessun problema.

Grazie mille per la risposta.

Kaya
28-09-2022, 13:25
Prima di tutto a questo punto mi chiedo se davvero ti vale la pena continuare a usare robocopy o magari invece passare a un software di backup vero e proprio (che ce ne sono pure di gratis che funzionano benissimo)

Detto questo come vedi non è un problema di robocopy, ma di "contorno".
Ricorda che se lo fai girare in operazioni pianificate l'ambiente è un po diverso (ad esempio non hai una interfaccia grafica e non accetta input da prompt)

Fai test e poi facci sapere

pps
28-09-2022, 13:41
Riporto l'esito dell'esperimento.
Il batch se eseguito a mano funziona.
Se schedulato non funziona dando il solito errore:

Impossibile trovare il percorso specificato.

Ricordo che nello script come parametro sorgente ho inserito la mappatura di rete "X:" e non il percorso riportato sopra.


Grazie per la tua risposta.
...non mettere X: , metti il percorso... ripeto, ROBOCOPY è "stronzo".

no_side_fx
28-09-2022, 14:08
ti conviene farlo in powershell da molti meno problemi dei .bat soprattutto con il task scheduler

LJT
28-09-2022, 14:49
...non mettere X: , metti il percorso... ripeto, ROBOCOPY è "stronzo".

:D concordo

LJT
28-09-2022, 14:55
ti conviene farlo in powershell da molti meno problemi dei .bat soprattutto con il task scheduler

Purtroppo non conosco bene powershell, ma alla fine lo dovrò convertire in vb.net o linguaggio più performante perché come dicevo è un programma di backup che si adatta ad ogni tipo di copia (tranne in questo cas0 :D ) in modo molto semplice.

Comunque al momento ho trovato il problema che causa l'errore. Adesso devo trovare la soluzione.

Per il momento userò la stringa che funziona:

robocopy "\\192.168.2.10\dati" "\\192.168.2.1\backup\dati" /S /B /Z /MIR /R:0 /W:0 /FFT /COPY:DT /LOG+"C:\LOG\Log.log" /NFL /NDL


Se nel frattempo dovessi trovare l'inghippo non mancherò di postarlo.

Grazie per il prezioso aiuto.

pps
28-09-2022, 15:30
Purtroppo non conosco bene powershell,
Non sapevo che ROBOCOPY funzionasse anche con POWERSHELL (non si finisce mai di imparare :eek: ), inoltre concordo con "no_side_fx" power shell è molto meglio.
La sintassi è la stessa, prova a controllare le variabili
ho dato uno sguardo al volo e mi sembrano uguali, però verifica... ultimamente stò perdendo qualche "colpo"... è l'età che avanza...
In buona sostanza, copi il codice in un editor e salvi come .PS1 poi lo usi come un .cmd

no_side_fx
28-09-2022, 16:32
In buona sostanza, copi il codice in un editor e salvi come .PS1 poi lo usi come un .cmd

esattamente
poi nel task scheduler vanno inseriti alcuni parametri:
in arguments -> -ExecutionPolicy Bypass -File "\mypath\file.ps1"
in start in -> la folder di origine
funziona 100%

pps
28-09-2022, 19:36
in arguments -> -ExecutionPolicy Bypass -File "\mypath\file.ps1"

Vero, Windows di default ha disattivato l' esecuzione degli script di PS :muro:
Altro che "perdere qualche colpo", qui sto proprio rinc*******ndo...:doh: