cambiare in modo ricorsivo le finestre del proprietario 7


95

In qualche modo ho accidentalmente impostato tutti i file in una sottocartella su "Nessun proprietario" e non riesco a cambiare tutte le autorizzazioni. Posso cambiarne una a mano cambiando il proprietario quindi impostando le autorizzazioni ma come posso cambiare il proprietario di tutti i file in questa directory in una volta?

Risposte:


92

Utilizzare takeowndal prompt dei comandi per diventare proprietario di una cartella, tutte le sue sottocartelle e file in modo ricorsivo:

takeown /f "c:\folder\subfolder" /r

Funziona bene, ma se non esegui la console della riga di comando come amministratore potrebbe non riuscire per i file che non possiedi.


105

Per correggere permessi davvero rotti, la cosa migliore è eseguire questi due comandi uno dopo l'altro:

takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T

Il primo ti darà la proprietà di tutti i file, tuttavia ciò potrebbe non essere sufficiente, ad esempio se tutti i file hanno le autorizzazioni di lettura / scrittura / esecuzione impostate su "nega". Possiedi i file ma non riesci ancora a far nulla.

In tal caso, eseguire il secondo comando, che correggerà le autorizzazioni interrotte.


3
Eccellente consiglio tecnico ... la tua soluzione è stata l'unica a funzionare. Grazie ancora.
carrabino,

4
Il miglior consiglio, è necessario utilizzare sia takeown che icacls.
Gnac,

2
/ Un'opzione è utile se si desidera assegnare "la proprietà al gruppo amministratori invece dell'attuale proprietario". È necessario disporre dei privilegi di amministratore per farlo. Potrebbe essere necessario aprire la finestra cmd usando ctrl-shift-enter.
PeterVermont,

4
Ho aggiunto il /D Yparametro in takeownmodo da confermare automaticamente le directory ricorrenti per le quali non si dispone delle autorizzazioni per "elenco directory".
Jeroen Wiert Pluimers,

3
@JeroenWiertPluimers, anche se è un buon consiglio ho rimosso la modifica in quanto è (abbastanza stupidamente) un parametro localizzato, quindi su Windows inglese sarà /D Y, su francese /D O, forse su spagnolo /D S, ecc.
laurent

26

Si noti che Cacls è obsoleto (dal momento che Windows Vista?) E ti consiglia di utilizzare icacls.

Questo comando ripristinerà in modo ricorsivo le autorizzazioni su una cartella:

icacls "C:\path\to\folder" /reset /T

5

È possibile utilizzare caclsdal prompt dei comandi:

cacls "C: \ path \ to \ folder" / E / T / C / G "Amministratore": F

L' /Tinterruttore gli consente di funzionare in modo ricorsivo. Sostituisci Administratorcon l'utente a cui desideri concedere le autorizzazioni.


1

Ho avuto problemi con i file con percorsi molto lunghi (più di 256 caratteri). I due comandi

takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T

ha funzionato ad eccezione di questi file con percorsi e nomi davvero lunghi. Ho finito per rinominare

"C:\path\to\really_long_folder_name"

per

"C:\path\to\r"

e poi in esecuzione

takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q

dopo di che ho potuto rinominare le cartelle in qualcosa di più sensato. takeown / DY risponde sì alle richieste. Per icacls ho usato / concesso per dare pieno accesso a tutti (dato che stavo solo cercando di accedere ai dati su un disco rigido da un PC morto), con / t per elaborare sottocartelle e file, / q per l'esecuzione in modalità silenziosa (nascondi successi) e / c per mostrare errori. Ho ripetuto il processo, rinominando le cartelle fino a quando tutte le autorizzazioni dei file non sono state aggiornate correttamente.

Spero che questo aiuti qualcuno che ha riscontrato errori simili agli errori "impossibile enumerare gli oggetti nel contenitore accesso negato" che stavo ottenendo quando cercavo di accedere ai dati da un vecchio disco rigido.


0

Grazie @ this.lau_ per il suggerimento / reset, questo è esattamente ciò di cui avevo bisogno per completare il mio script per diventare proprietario del CSC e fare un backup. Dopo aver assunto la proprietà di C: \ Windows \ CSC le autorizzazioni tendono a diventare molto incoerenti per quanto riguarda l'ereditarietà: l'opzione / reset ha risolto questo problema per me.

Function Copy-CSCData {
    $Datetime = Get-Date -Format yyyyMMdd.hhmmss
    $LogPath = 'PATH TO LOG'
    $CSCSource = 'C:\Windows\CSC\v2.0.6\namespace'
    $Dest = 'DESTINATION PATH'
    $icaclsource = "\\?\" + $CSCSource

    $CSCLogfile = "$LogPath\" + "$Datetime" + "_CSCRobocopy.log"

    icacls.exe $icaclsource /reset /T
    icacls.exe $icaclsource /grant :r "Everyone:(OI)(CI)F"

    Robocopy $CSCSource $Dest /Copy:DATSO /E /XO /Z /LOG+:$CSCLogfile /V /FP /NP /R:2 /W:2 /XF "~$*","*.tmp"
}

@Thesle Williams - se dai un'occhiata alla variabile $ icaclsource dall'alto, noti che aggiungo "\? \" Davanti al percorso di origine. Aggiungendo questo in primo piano, accetterà nomi di file più lunghi. Anche questo è stato un problema che ho risolto! Saluti.

Josh


Benvenuto in Super User! Ti faccio solo sapere che gli utenti "ping" funzionano solo nei commenti ai post, non nei post effettivi. Sfortunatamente non puoi commentare post diversi dai tuoi o sulle risposte alle tue domande, fino a quando non avrai più di 50 anni di reputazione . Vedi Come funzionano i commenti @replies? . Nota che non puoi semplicemente eseguire il ping di chiunque in un commento. Solo l'autore del post e qualsiasi altro utente che abbia già commentato.
robinCTS
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.