Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Nastavení oprávnění na logické svazky - command line

Zdravím,
existuje nějaký příkaz přes command line jak odebrat např. skupině users přístup na D$,E$ .... aby na tyto disky nemohli vůbec zapisovat.
Něco jako pomocí utilitky kde se dá zacyklit např. příkaz "SUBINACL /verbose=1 /subdirectories "D:\TEST" /revoke=Users
(odebere skupině users přístup do adresáře d:\TEST). Utilitka subinacl ale zdá se nejde použít na disk jako takový, pouze na adresáře ...

Předmět Autor Datum
z příkazového řádku nepoužívám, ale šlo by začít tady: cacls cacls d:
lední brtník 12.03.2011 13:06
lední brtník
vzhledem k tomu ze to pouziji na win7 a win2008 tak icacls je doporucovane reseni (a funguje) dik
MKc 14.03.2011 20:46
MKc
Ahoj, tak pomocí ICACLS se to zvládlo viz: icacls C:\ /grant:r BUILTIN\Users:(CI) icacls C:\ /grant…
MKc 28.03.2011 21:16
MKc
interpret "dosu", který si přečte celý cyklus a pak ho najednou přeloží, nerozchodí různé hodnoty pr…
lední brtník 28.03.2011 21:54
lední brtník
Skvělé, tento způsob zafungoval. Ušetřil jsi mi mnoho a mnoho minut!!! Když by mi nikdo nepomohl s ř…
MKc 28.03.2011 22:12
MKc
jen přidám odkazy: funkce "setlocal EnableDelayedExpansion" dle setlocal.html ... nefungovalo mi vol… poslední
lední brtník 28.03.2011 22:15
lední brtník

Ahoj,
tak pomocí ICACLS se to zvládlo
viz:
icacls C:\ /grant:r BUILTIN\Users:(CI)
icacls C:\ /grant BUILTIN\Users:(CI)(IO)(WD) atd atd..

Co teď zkoumám je deployment těchto nastavení na několik PC. Normálně bych použil příkaz
FOR /F "tokens=1 delims=," %%G IN (seznam.txt) DO icacls \\%%G\C$ /grant:r BUILTIN\Users:(CI),
což by mi na všech PC v seznam.txt provedlo nastavení icacls na C:\.
Problém je pokud těch ICACLS commandů mám několik (pár pro C:\, pár pro D:\) a tu proměnou %%G bych chtěl použít i v příkazu ICACLS, proměnná se na dalším řádku příkazu ztratí..

@echo off
FOR /F "tokens=1 delims=," %%G IN (seznam.txt) DO icacls \\%%G\C$ /grant testdomain\testuser%%G:F
icacls \\%%G\D$ /grant testdomain\testuser%%G:F
icacls \\%%G\E$ /grant testdomain\localuser%%G:F

První příkaz se provede ale u dalších už to pokud používám proměnné hodí chybu
testdomain\localuser%G: No mapping between account names and security IDs was do
ne. Musel bych natvrdo napsat testdomain\localuser01:F NEBO všechny příkazy dát do jedné řádky
icacls \\%%G\C$ /grant testdomain\testuser%%G:F & icacls \\%%G\D$ /grant testdomain\testuser%%G:F % ... což se obávám že jisté omezení v délce příkazu asi bude a mě se to nebude vejít.

Existuje na to nějaké řešení? Jak spustit batku na X PC o hodně řádcích kde se vyskytují proměnné?

Proměnnou %%G používám jak pro identifikaci PC na kterém to chci spustit tak pro identifikaci uzivatele (proměnná obsahuje nějaké číslo) .. tj pc bude např. 01,02,03 .. a uživatelé localuser01,localuser02 .. na pc 01 bude localuser01 - využití proměnných se zde tedy přímo vybízí.

interpret "dosu", který si přečte celý cyklus a pak ho najednou přeloží, nerozchodí různé hodnoty proměnné, dosadí jen jednu. metoda doporučovaná ms mi nefungovala, používám subrutinu, kde se proměnná předá korektně.
snad jsem smysl těch příkazů nezkomolil:

@echo off
:CYKLUS
FOR /F "tokens=1 delims=," %%G IN (seznam.txt) DO call :SUB %%G
goto END

:SUB
REM predavany parametr zvenci je %1
icacls \\%1\C$ /grant testdomain\testuser%1:F
icacls \\%1\D$ /grant testdomain\testuser%1:F
icacls \\%1\E$ /grant testdomain\localuser%1:F
goto :EOF

:END

Skvělé, tento způsob zafungoval. Ušetřil jsi mi mnoho a mnoho minut!!! Když by mi nikdo nepomohl s řešením tak bych šel asi cestou vytvoření cca 20 BAT souborů, pro každou batku jeden icacls příkaz s proměnnými .. a pak už bych jen kliknul na batku, počkal bych až se provede, pak kliknul na další ..
Tohle je o moc lepší :) Díky moc

Zpět do poradny Odpovědět na původní otázku Nahoru