Welche Dateisystem- und Druckerfreigaben gibt es und wer kann sie nutzen?

Eine Dateisystem- oder Druckerfreigabe ist schnell angelegt und auch schnell vergessen. Um sicher zu gehen, dass es keine verwaisten Freigaben oder Freigaben mit zu viel Zugriffsrechten gibt, hat der Dotnet-Doktor ein PowerShell-Skript geschrieben.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

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 } ()