mboost-dp1
PowerShell Mapperettigheder
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej kloge mennesker.
Har prøvet at søge lidt rundt, men kan ikke umiddelbart finde noget som gør det jeg vil.
Jeg skal bruge et script, gerne PowerShell som løber alle undermapper i en mappe i gennem og lister alle mapper / filer som har specifikke rettigheder sat.
Jeg er ikke interesseret i nedarvede rettigheder, kun mapper eller filer som har rettigheder sat specifikt på dem.
Nogen som ligger inde med noget i den stil?
Har prøvet at søge lidt rundt, men kan ikke umiddelbart finde noget som gør det jeg vil.
Jeg skal bruge et script, gerne PowerShell som løber alle undermapper i en mappe i gennem og lister alle mapper / filer som har specifikke rettigheder sat.
Jeg er ikke interesseret i nedarvede rettigheder, kun mapper eller filer som har rettigheder sat specifikt på dem.
Nogen som ligger inde med noget i den stil?
Jeg havde egentlig troet at der ville være nogen som lå inde med noget da det virker oplagt at tjekke disken i gennem for filer med specielle rettigheder.
Men da det ikke lader til at være tilfældet ville det være ret fedt hvis du kunne strikke noget sammen.
Må ærligt indrømme at mine PowerShell evner er lidt begrænsede ;)
Men da det ikke lader til at være tilfældet ville det være ret fedt hvis du kunne strikke noget sammen.
Må ærligt indrømme at mine PowerShell evner er lidt begrænsede ;)
Jeg er ikke en Powershell haj, men det virker som en overskuelig opgave.
Jeg kan foreslå den her:
http://blogs.technet.com/b/zarkatech/archive/2012/... (der er en kommentar der forklarer hvordan man kun søger på mapper)
Så er det vel bare et spørgsmål om at gennemgå outputtet for den specifikke permission du leder efter? Man må i hvert fald kunne gøre et eller andet med det.
Hvis Magten giver op, kan jeg godt give det et forsøg. :)
Jeg kan foreslå den her:
http://blogs.technet.com/b/zarkatech/archive/2012/... (der er en kommentar der forklarer hvordan man kun søger på mapper)
Så er det vel bare et spørgsmål om at gennemgå outputtet for den specifikke permission du leder efter? Man må i hvert fald kunne gøre et eller andet med det.
Hvis Magten giver op, kan jeg godt give det et forsøg. :)
#6
Jeg har fundet en del scripts som gør noget i nærheden. Problemet er egentlig at de alle outputter rettighederne for de forskellige filer hvilket jeg egentlig er ligeglad med (nogle mapper har 7-15 individuelle brugere med specielle rettigheder hvilket er rimelig uoverskueligt).
Det jeg skal bruge er en liste over filer eller mapper som har fået sat specielle rettigheder så jeg bagefter kan gå dem i gennem og fjerne brugerene og i stedet lave nogle fornuftige grupper.
Jeg har fundet en del scripts som gør noget i nærheden. Problemet er egentlig at de alle outputter rettighederne for de forskellige filer hvilket jeg egentlig er ligeglad med (nogle mapper har 7-15 individuelle brugere med specielle rettigheder hvilket er rimelig uoverskueligt).
Det jeg skal bruge er en liste over filer eller mapper som har fået sat specielle rettigheder så jeg bagefter kan gå dem i gennem og fjerne brugerene og i stedet lave nogle fornuftige grupper.
Nu skal du sikkert bruge den helt forkromet løsning.
Men kan lige smide denne mere simple hvis det nu var nok.
Se / kontroller rettigheder i aktuelle mappe
Søger efter rettighed på filer/mapper samt i undermapper
Søger efter rettighed på alle mapper samt i undermapper
Men kan lige smide denne mere simple hvis det nu var nok.
Se / kontroller rettigheder i aktuelle mappe
Get-Acl | fl
Søger efter rettighed på filer/mapper samt i undermapper
Get-ChildItem C:\ -Recurse | Get-Acl | where{$_.accesstostring -like "*ReadAndExecute*"}
Søger efter rettighed på alle mapper samt i undermapper
Get-ChildItem C:\ -Recurse | Where Object{($_.psiscontainer)} | Get-Acl | where{$_.accesstostring -like "*ReadAndExecute*"}
C# forslag:
using System;
using System.IO;
using System.Security.Principal;
namespace E
{
public delegate void CheckDirectory(DirectoryInfo di);
public delegate void CheckFile(FileInfo fi);
public delegate void NoAccess(DirectoryInfo di);
public class Program
{
public static void ProcessDirectory(DirectoryInfo di, CheckDirectory chkdir, CheckFile chkfil, NoAccess na)
{
try
{
chkdir(di);
foreach(FileInfo fi in di.GetFiles())
{
chkfil(fi);
}
foreach(DirectoryInfo newdi in di.GetDirectories())
{
ProcessDirectory(newdi, chkdir, chkfil, na);
}
}
catch(UnauthorizedAccessException)
{
na(di);
}
}
public static void PrintDirNamIfAccessControl(DirectoryInfo di)
{
if(di.GetAccessControl().GetAccessRules(true, false, typeof(NTAccount)).Count > 0 ||
di.GetAccessControl().GetAccessRules(true, false, typeof(SecurityIdentifier)).Count > 0)
{
Console.WriteLine("Access Control: " + di.FullName);
}
}
public static void PrintFileNamIfAccessControl(FileInfo fi)
{
if(fi.GetAccessControl().GetAccessRules(true, false, typeof(NTAccount)).Count > 0 ||
fi.GetAccessControl().GetAccessRules(true, false, typeof(SecurityIdentifier)).Count > 0)
{
Console.WriteLine("Access Control: " + fi.FullName);
}
}
public static void PrintDirNamIfNoAccess(DirectoryInfo di)
{
Console.WriteLine("No Access: " + di.FullName);
}
public static void Main(string[] args)
{
ProcessDirectory(new DirectoryInfo(@"C:\users"), PrintDirNamIfAccessControl, PrintFileNamIfAccessControl, PrintDirNamIfNoAccess);
}
}
}
Og i en multithreaded udgave:
Jeg er dog ikke tilfreds med koden. Det må kunne laves pænere. Men jeg kunne ikke lige få en god ide.
using System;
using System.Collections.Concurrent;
using System.IO;
using System.Security.Principal;
using System.Threading;
namespace E
{
public delegate void CheckDirectory(DirectoryInfo di);
public delegate void CheckFile(FileInfo fi);
public delegate void NoAccess(DirectoryInfo di);
public class MTQ
{
private CheckDirectory chkdir;
private CheckFile chkfil;
private NoAccess na;
private BlockingCollection<DirectoryInfo> queue;
private Thread[] t;
public MTQ(int nthreads, CheckDirectory chkdir, CheckFile chkfil, NoAccess na)
{
this.chkdir = chkdir;
this.chkfil = chkfil;
this.na = na;
queue = new BlockingCollection<DirectoryInfo>();
t = new Thread[nthreads];
for(int i = 0; i < t.Length; i++)
{
t[i] = new Thread(Run);
}
}
public void Start()
{
for(int i = 0; i < t.Length; i++)
{
t[i].Start();
}
}
public void Join()
{
for(int i = 0; i < t.Length; i++)
{
t[i].Join();
}
}
public void Add(DirectoryInfo di)
{
queue.Add(di);
}
public void Run()
{
DirectoryInfo di;
while(true)
{
if(queue.TryTake(out di, 100))
{
Program.ProcessDirectory(di, this, chkdir, chkfil, na);
}
else
{
return;
}
}
}
}
public class Program
{
public static void ProcessDirectory(DirectoryInfo di, MTQ q, CheckDirectory chkdir, CheckFile chkfil, NoAccess na)
{
try
{
chkdir(di);
foreach(FileInfo fi in di.GetFiles())
{
chkfil(fi);
}
DirectoryInfo[] subdirs = di.GetDirectories();
for(int i = 0; i < subdirs.Length; i++)
{
q.Add(subdirs[i]);
}
}
catch(UnauthorizedAccessException)
{
na(di);
}
}
public static void PrintDirNamIfAccessControl(DirectoryInfo di)
{
if(di.GetAccessControl().GetAccessRules(true, false, typeof(NTAccount)).Count > 0 ||
di.GetAccessControl().GetAccessRules(true, false, typeof(SecurityIdentifier)).Count > 0)
{
Console.WriteLine("Access Control: " + di.FullName);
}
}
public static void PrintFileNamIfAccessControl(FileInfo fi)
{
if(fi.GetAccessControl().GetAccessRules(true, false, typeof(NTAccount)).Count > 0 ||
fi.GetAccessControl().GetAccessRules(true, false, typeof(SecurityIdentifier)).Count > 0)
{
Console.WriteLine("Access Control: " + fi.FullName);
}
}
public static void PrintDirNamIfNoAccess(DirectoryInfo di)
{
Console.WriteLine("No Access: " + di.FullName);
}
public static void Main(string[] args)
{
MTQ q = new MTQ(8, PrintDirNamIfAccessControl, PrintFileNamIfAccessControl, PrintDirNamIfNoAccess);
q.Add(new DirectoryInfo(@"C:\users"));
q.Start();
q.Join();
}
}
}
Jeg er dog ikke tilfreds med koden. Det må kunne laves pænere. Men jeg kunne ikke lige få en god ide.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.