View Full Version : Robocopy
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
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
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
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.
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
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
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
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à?
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.
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.
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
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
...non mettere X: , metti il percorso... ripeto, ROBOCOPY è "stronzo".
:D concordo
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.
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%
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:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.