Eine Dateisystem- oder Druckerfreigabe ist schnell angelegt und auch schnell vergessen. Um sicher zu gehen, dass es keine verwaisten Freigaben oder Freigaben mit zu vielen Zugriffsrechten gibt, nutze ich das nachstehende PowerShell-Skript.
Es fragt mit Get-WMIobject Win32_Share die Freigaben auf einem entfernten System ab. Mit dem Commandlet Get-ACL kann man die Liste der Zugriffsrechte bekommen.
Die Liste der abzufragenden Computer kann man aus einer Textdatei lesen,
$computerList = Get-Content "$psscriptroot\computerliste.txt"
statisch hinterlegen
$computerList = "PC1","PC2","PC3" # usw.
oder aus dem Active Directory auslesen:
(Get-ADComputer -Filter {OperatingSystem -like "*windows*"}).Name
Das Skript sieht wie folgt aus
# Auflisten der auf mehreren Computern angelegten Dateisystem- und Druckerfreigaben
function Get-Share($computer)
{
$befehl = { Get-WMIobject Win32_Share | where { $_.description -ne "Default share" -and $_.name -ne "Admin$" -and $_.name -ne "IPC$" } }
$shares = invoke-command $befehl -computer $computer
$shareString = ""
foreach($s in $shares)
{
$shareString = $shareString + "\\$computer\$($s.name)" + " -> " + $s.path + "`n"
$shareString = $shareString + "Beschreibung: " + $s.description + "`n"
try
{
$acl = Get-ACL "\\$computer\$($s.name)" -ErrorAction stop
foreach($ace in $acl)
{
foreach($a in $ace.access)
{
$shareString = $shareString + $a.AccessControlType.ToString() + ": " + $a.IdentityReference + " -> " + $a.FileSystemRights.ToString() + "`n"
}
}
}
catch
{
$shareString = $shareString + "Kann ACL nicht lesen!`n"
}
$shareString = $shareString + "`n"
}
return $shareString
}
$computerList = (Get-ADComputer -Filter {OperatingSystem -like "*windows*"}).Name #Get-Content "$psscriptroot\computerliste.txt"
foreach($c in $computerList) { get-Share $c }
()