W jaki sposób powiązać nazwy folderów z nazwami użytkowników?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
W jaki sposób powiązać nazwy folderów z nazwami użytkowników?
Cześć, Skrypciarze! W mojej firmie dawno temu włączono przekierowanie folderów Moje dokumenty. Foldery Moje dokumenty ponad 6 tys. użytkowników są przekierowywane do wspólnego udziału. Poprzedni administrator (już u nas nie pracuje) przeniósł cały katalog na nowy serwer. Spowodowało to, że uczestnicy grupy „Administrators” stali się właścicielami wszystkich podkatalogów. Z jakiegoś powodu uprawnienia również zostały zresetowane. Obecnie grupa „Everyone” ma pełny dostęp do folderów Moje dokumenty wszystkich użytkowników. Kiepsko, prawda?
Mam więc następujące pytanie: Czy można napisać skrypt, zmieniający właściciela każdego z folderów w tym udziale (łącznie z podfolderami) na użytkownika, od którego nazwy pochodzi nazwa danego folderu? Potrzebuję czegoś, co przejdzie przez cały katalog /home i ustawi nazwę każdego folderu jako nazwę użytkownika, do którego należy dany folder.
Wdzięczność, jaką sobie zyskacie, jeśli uda się wam udzielić mi pomocy, jest niezmierzona!
-- LS
Cześć, LS! W tym celu możesz użyć narzędzia Subinacl lub Icacls. Zalecane jest drugie z tych narzędzi. Możesz odczytać nazwy folderów przy użyciu języka VBScript lub Windows PowerShell, a nawet pliku wsadowego. Przy użyciu Windows PowerShell nie jest to takie znów trudne.
Oto dokumentacja narzędzia icacls. A oto krótki przykład użycia tego narzędzia w skrypcie Windows PowerShell:
ModifySecurityOfFoldersUsingIcacls.ps1
#ModifySecurityOfFoldersUsingIcacls.ps1
#ed wilson, msft, 11/23/2009
# używa icalcls i Get-ChildItem
# http://bit.ly/7FVysn
Get-ChildItem -Path C:\share |
Where-Object { $_.psiscontainer } |
ForEach-Object {
icacls $_.fullname /Grant Users:`(F`)
}
Do początku strony |