Modifica delle autorizzazioni per le cartelle in vbscript


0

Ho un vbscript che creerà una cartella, ma ho bisogno che l'utente abbia le autorizzazioni complete. Ho inserito il mio codice qui sotto. (Sistema Windows 8)

FSO.CreateFolder(lclFolder)
oWS.exec "icacls " & lclFolder & " /reset /inheritance:r /grant:r Users:(OI)(CI)F /T"

Ho lo script in esecuzione come amministratore usando:

If Not WScript.Arguments.Named.Exists("elevate") Then
  CreateObject("Shell.Application").ShellExecute WScript.FullName _
    , WScript.ScriptFullName & " /elevate", "", "runas", 1
  WScript.Quit
End If

La cartella viene creata, ma le autorizzazioni utente erano: lettura ed esecuzione, Elenco contenuti cartelle e lettura. Dopo l'inserimento della linea icacls, questo non è cambiato. Qualcuno può consigliare dove ho sbagliato?


1
quindi elevare il vbscript con un utente che disponga dell'autorizzazione completa con runas. Quello che stai cercando di fare è un compito privilegiato.
Ramhound,

Grazie per la risposta. Lo script dovrebbe essere in esecuzione come amministratore (ho inserito del codice sopra). Sono ancora nuovo su vb, quindi potrebbe mancare qualcosa di base / ovvio - scusa.
Glib Gibon,

1
Qual è esattamente la tua domanda? Se hai aumentato le autorizzazioni del processo che esegue vbscript, dovrebbe essere eseguito senza problemi. Dovrebbe funzionare esattamente come se avessi effettivamente eseguito il comando stesso in un prompt dei comandi con privilegi elevati.
Ramhound,

La cartella viene creata, ma l'autorizzazione dell'utente era: lettura ed esecuzione, Elenco contenuti cartelle e lettura. Volevo cambiare le autorizzazioni in Controllo completo. Ho pensato che la mia sintassi potrebbe essere disattivata per la riga icalcs perché la cartella ha ancora solo le autorizzazioni di base per l'utente - non piena.
Glib Gibon,

1
Ti consiglio vivamente di aggiornare la tua domanda per includere una domanda effettiva. Hai fornito la spiegazione richiesta di ciò che vuoi, ora includilo nella domanda.
Ramhound,

Risposte:


0

Secondo il metodo Exec (Windows Script Host) :

La riga di comando dovrebbe apparire esattamente come se fosse stata digitata al prompt dei comandi.

Pertanto, forzare l'incorporamento del nome della cartella in una coppia di "virgolette doppie come segue:

oWS.exec "icacls """ & lclFolder & """ /reset /inheritance:r /grant:r Users:(OI)(CI)F /T"

o come segue:

oWS.exec "icacls " & CHR(34) & lclFolder & CHR(34) & " /reset /inheritance:r /grant:r Users:(OI)(CI)F /T"

Grazie mille per entrambe le tue risposte. Sembra che siano state le virgolette invertite mancanti a farmi arrabbiare. Ho anche finito per usare / concedere l'Utente ... Sembra che il riferimento (OI) (CI) sia importante da includere, quindi almeno ho capito bene. Grazie ancora
Glib Gibon,

0

È possibile aggiungere un comando TAKEOWN .

Prova a usare l'esempio visto qui . Forse sono io ma il codice di esempio ha più senso di quello che .vbshai fornito.

Set WshShell = CreateObject("WScript.Shell")
strFile = "c:\test_folder\test_file.txt"
setPerms = "%COMSPEC% /c echo Y| C:\windows\system32\cacls.exe " & Chr(34) & strFile & Chr(34) & " /G domain\everyone:F"
wscript.echo setPerms
WshShell.run setPerms

Cambia la strFiledirectory e le domain\everyonetue preferenze.

Inoltre, sono propenso a pensare che il comando Cacls non sia eseguito con i privilegi di amministratore fino in fondo. Questo è lo .VBSscript che uso per elevare i comandi, i file, gli script, ecc ... e implica racchiudere il comando che si desidera eseguire come amministratore. Tenete presente che esegue anche in silenzio, ma è possibile disattivare questa opzione.

bElevate = False
if WScript.Arguments.Count > 0 Then If WScript.Arguments(WScript.Arguments.Count-1) <> "|" then bElevate = True
if bElevate Or WScript.Arguments.Count = 0 Then ElevateUAC
REM run the following script with admin privilages. start point.

ESEGUI QUESTO COMANDO COME AMMINISTRATORE

REM the above script will be run with admin privilages. end point.
Sub ElevateUAC
    sParms = " |"
    If WScript.Arguments.Count > 0 Then
            For i = WScript.Arguments.Count-1 To 0 Step -1
            sParms = " " & WScript.Arguments(i) & sParms
        Next
    End If
    Set oShell = CreateObject("Shell.Application")
    oShell.ShellExecute "wscript.exe", WScript.ScriptFullName & sParms, , "runas", 1
    WScript.Quit
End Sub
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.