Perché un processo di Utilità di pianificazione non può accedere a un'unità di rete mappata?


27

Ho un compito di Utilità di pianificazione per eseguire Robocopy per il backup di file locali su una condivisione di rete. Devo utilizzare le credenziali di dominio per accedere alla condivisione di rete ma il computer locale non si trova nel dominio e il lavoro viene eseguito come amministratore locale. Questa soluzionedi mappare e annullare la mappatura temporanea della condivisione di rete funziona, ma lascia la mia password esposta in testo semplice per chiunque guardi le azioni di lavoro di Utilità di pianificazione. Preferirei mappare l'unità di rete normalmente su base semi-permanente, quindi il lavoro Utilità di pianificazione deve solo eseguire Robocopy e fare riferimento alla lettera di unità appropriata. Comunque ottengo sempre l'errore "Il sistema non riesce a trovare il percorso specificato." nel registro Robocopy quando questo viene eseguito dall'Utilità di pianificazione, anche se il comando funziona correttamente da un prompt dei comandi con privilegi elevati (il processo è impostato per essere eseguito con i privilegi più elevati). Nota anche che ho apportato questa modifica al registro per accedere alle unità mappate da un prompt dei comandi con privilegi elevati.

MODIFICA: Per chiarire, effettuato l'accesso come amministratore locale, avvio Windows Explorer come amministratore. Mappare la condivisione di rete sulla lettera di unità Y. Avvio il prompt dei comandi come amministratore ed eseguo

C:\Windows\System32\Robocopy.exe C:\temp Y:\temp

Funziona bene. Creo un lavoro Utilità di pianificazione per eseguire esattamente lo stesso comando, indipendentemente dal fatto che l'utente abbia effettuato l'accesso o meno, con i privilegi più elevati. Lo eseguo e ricevo un errore. Scrivo su un registro e ottengo

ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.

seguito da

ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.

Il tuo percorso locale o percorso di rete contiene spazi? In tal caso, stai incapsulando il percorso con virgolette doppie all'inizio e alla fine del percorso?
Dom

@SunWKim Nessuno spazio in nessuno dei due percorsi.
Craig W,

qual è la riga di comando che stai usando per eseguire il backup da locale a rete? A quale tipo di condivisione di rete stai eseguendo il backup? Mi fa pensare che forse la condivisione di rete non è disponibile (non connessa) quando si esegue il comando di backup.
Dom

Funziona come il tuo utente o semplicemente "un amministratore". Se è il tuo utente, l'unità è mappata in modo persistente per il tuo utente?
Nick,

@SunWKim Sì, l'unità è collegata dopo la mappatura. L'amministratore locale non ha i diritti sulla condivisione di rete, motivo per cui devo mapparlo come utente diverso prima di eseguire Robocopy.
Craig W,

Risposte:


17

Le unità mappate sono un concetto di interfaccia utente e non sono disponibili per attività in background come quella. Accedi alla destinazione tramite UNC e assicurati che l'utente che esegue l'attività abbia accesso alla destinazione.


Non possibile. Il computer non è sul dominio, quindi devo eseguire l'attività come utente non di dominio, ma solo gli utenti di dominio hanno accesso alla condivisione di rete.
Craig W,

So che è molto tardi al gioco, ma hai provato a separare il tuo lavoro in 2 attività pianificate, una per la condivisione di rete con le credenziali di dominio e un'altra in esecuzione come amministratore locale con accesso all'unità mappata? Dovresti solo scagliarli o usare un file mutex o qualcosa per assicurarti che vadano in ordine.
Dan Csharpster,

7

Nel mio caso, tutto quello che dovevo fare era deselezionare la run with highest privilegesbandiera, ma sto eseguendo l'attività sullo stesso utente dell'utente che ha mappato l'unità.


Questo è stato per me. Ha senso.
Tom Haws,


1

Un'altra opzione è solo quella di utilizzare l'intero percorso di rete, poiché Robocopy li supporta. ad es. robocopy c: \ temp \\ server \ share \ temp

O meglio ancora, esegui il backup sul server stesso. Crea un account amministratore di dominio solo per il processo di backup. Feed robocopy la password da un file di testo a cui solo gli amministratori di dominio possono accedere.

Anni fa ho creato diversi script .cmd che avrebbero eseguito il backup dei file essenziali per tutti i sistemi della rete in questo modo. L'unico programma esterno che ho usato era il comando Grep di Cgywin e un prompt dei comandi smtp mail mittente.

Ho realizzato uno script per scansionare la rete alla ricerca di sistemi. Creerebbe un file di testo con tutti i nomi di sistema e mi avviserebbe via e-mail di tutti i nuovi sistemi trovati. (Avevo un file di configurazione che avrebbe analizzato per saltare i sistemi.) Ogni nuovo sistema aveva una directory di backup creata per esso e un file di configurazione di backup inserito in esso. L'utente può modificare questo file ed elencare tutte le directory di cui è necessario eseguire il backup. Potrebbero anche specificare l'ora dei loro backup in modo che non accada quando si trovavano in ufficio. Ho eseguito questo script sul server ogni 5 minuti, poiché non è stato necessario alcun tempo di elaborazione e mi piace la funzione di sicurezza di avvisarmi quando un nuovo sistema è stato collegato alla rete.

Un altro script analizza tutti i singoli file di configurazione del backup e pianifica un'attività per eseguire un backup su quel sistema. Questo è stato eseguito ogni giorno alle 00:01.

Infine, lo script di backup analizzava il file di configurazione che gli era stato passato dallo scheduler e usando robocopy avrebbe copiato tutti i file. Ho avuto un controllo completo degli errori sui file di configurazione poiché gli utenti li avrebbero modificati e avrei ricevuto e-mail su eventuali problemi.

Gli utenti potevano leggere i loro file di backup, ma non potevano eliminare il backup. Ciò ha fornito una certa protezione dai danni di un possibile dipendente scontento.

Probabilmente qualcosa di molto più elegante avrebbe potuto essere realizzato in .vbs o powershell, ma non sono davvero un programmatore. Le mie lezioni di programmazione includevano Cobal e JCL. Ricordo di aver copiato gli script quando me ne sono andato, ma chissà dove sono ora.


1

Ho superato il problema modificando l'opzione "Esegui se l'utente è connesso o meno" su "Esegui solo quando l'utente è connesso". Prova questo può aiutarti.


1
echo Get-Date >> c:\mount_nfs_log.txt
net use X: \\share\folder password /user:domain\user>> c:\mount_nfs_log.txt 2>&1

La creazione di questo script PowerShell, la pianificazione del lavoro come SISTEMA e l'impostazione per l'esecuzione al riavvio mi hanno permesso di utilizzare le lettere di unità nei miei script poiché UNC non è un'opzione a causa di un mal di testa di altri problemi.


Questo ha risolto il problema per me! avere questo comando per accedere con autenticazione da eseguire prima che lo script facesse meraviglie! Questo risolve il mal di testa dovuto al "mirroring degli account utente" con qualcosa di robusto.
Tschallacka,

1
La prima volta che ho aiutato qualcuno in overflow dello stack, felice di poterti aiutare. Inoltre, usa "echo Get-Date" invece di quello che avevo prima.
Ryan McGrath,

Non avevo bisogno della registrazione, quindi ho appena aggiunto una cmd /c net usevoce di lavoro prima della voce di lavoro di copia nell'attività e questo ha risolto il mio problema. Il tuo post è stato il primo dopo quattro ore a incontrare account mirror suggeriti che hanno fornito una soluzione semplice. Mantenere il buon lavoro!
Tschallacka,

Stai ancora mantenendo i percorsi UNC con questo script, quindi lo sai. Solo perché si sta assegnando una lettera di unità a un percorso UNC e quindi si fa riferimento a quella lettera di unità, è comunque necessario mantenere \\ServerName\ShareNamein questo tipo di logica. Inoltre, questo non deve necessariamente essere PowerShell poiché NET USEviene eseguito anche in batch e per quanto riguarda la pianificazione con Utilità di pianificazione come account SYSTEM, è possibile farlo indipendentemente dal tipo di script, logica, ecc. Pianificato per l'esecuzione tramite Attività Scheduler.
Pimp Juice IT

Inoltre, solo per chiarire, si noti che è possibile utilizzare anche in NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>questo modo e non è necessario specificare una lettera di unità se è necessaria solo l'autenticazione per la condivisione anziché la lettera di unità effettiva.
Pimp Juice IT

0

Prova a cambiare la posizione "start in" in "c: \". Ciò sembrava risolverlo per me, quindi forse il sistema impediva l'esecuzione del cmd.exe dal \ windows \ system32 \ predefinito come funzionalità di sicurezza.


0

Ho avuto lo stesso problema nel tentativo di accedere a r: /xxxfilename.txt con un'unità mappata di Windows r: \ server \ share durante la chiamata di uno script dall'utilità di pianificazione di Windows.

Ho risolto utilizzando //server/share/xxxfilename.txt
Notare che la barra rovesciata viene convertita in barra.
Ora il mio script cyhwin bash viene eseguito nell'utilità di pianificazione di Windows e nella shell cygwin.
Nota: il comando " net use " può accedere alle unità della mappa nella shell ma mostra Non disponibile R: quando eseguo questo comando nell'utilità di pianificazione di Windows.


Benvenuto in Super User! Si prega di leggere di nuovo attentamente la domanda. La tua risposta non risponde alla domanda originale. OP non menziona l'uso di Cygwin o bash.
DavidPostill

0

Come ha notato un altro utente, l'impostazione dell'opzione su "Esegui se l'utente è connesso o meno" su "Esegui solo quando l'utente è connesso" sembra funzionare. È quindi possibile utilizzare il percorso mappato (ad es. Z :) o il percorso del server (ad es. \\ ServerName \ Path).

Naturalmente, se si utilizza questa opzione, è necessario fare come indicato e assicurarsi di aver effettuato l'accesso al server come utente con accesso all'unità pertinente. Ricordo di essere stato in una vecchia azienda con una serie di lavori configurati come questo. Un giorno qualcuno "si è disconnesso" dal server principale dei lavori, senza aspettarsi che ciò avrebbe avuto alcun tipo di impatto in quanto non stavano spegnendo la macchina in alcun modo ...

Inoltre, in questi giorni a Windows piace fare molti riavvii del sistema auto-invocati. Quindi utilizzare questa soluzione a proprio rischio.


0

Si noti inoltre che se si esegue il mapping nello script e la password contiene%, è necessario scrivere %% affinché lo script funzioni dal taskcheduler ma% funzioni dal prompt dei comandi


0

si possono usare i seguenti comandi, da aggiungere nello stesso script batch, per eseguire lo script Batch dall'attività di pianificazione di Windows per ottenere dir, file copiato sul sistema locale usando l'attività di pianificazione di Windows; net use Y: "\\ xxx \ xxx \ xxx cd / d Y: net user / d Y: / Y


-2

Grazie, penso che usando "start in c: \" ho risolto il mio problema, seguirò questo problema per confermare che è stato risolto.

Stavo avendo lo stesso problema, se ho fatto clic direttamente sul batch funzionava perfettamente ma non nell'ambito dell'attività pianificata.


Questo non risponde alla domanda dell'autore. Si prega di non lasciare commenti come risposte.
Ramhound,

Per favore non aggiungere "grazie" come risposte. Investi un po 'di tempo nel sito e otterrai i privilegi sufficienti per migliorare le risposte che ti piacciono, che è il modo in cui Super User ti ringrazia.
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.