Freigaben, Freigaberechte und ACL Error Handling
Moin,
ich bins wieder Aktuell bin ich ganz zufrieden bis auf eine kleine Sache.
Wenn ein Computer nicht via PING erreichbar ist, dann soll das ganz nicht ausgeführt werden.
Aktuell behelfe ich mir das am Ende im Report "Online" ein True oder False steht, ist auch OK so.
Um das ganze zu Beschleunigen würde ich mir wünschen das bei einem Test-Connection False das Skript abbricht und in der Tabelle unter dem catch das ganze ebenfalls einfach dokumentiert wird. Bin aber zu doof. Klappt nicht so.
Hat da jemand ne Idee?
Hier das Skript
ich bins wieder Aktuell bin ich ganz zufrieden bis auf eine kleine Sache.
Wenn ein Computer nicht via PING erreichbar ist, dann soll das ganz nicht ausgeführt werden.
Aktuell behelfe ich mir das am Ende im Report "Online" ein True oder False steht, ist auch OK so.
Um das ganze zu Beschleunigen würde ich mir wünschen das bei einem Test-Connection False das Skript abbricht und in der Tabelle unter dem catch das ganze ebenfalls einfach dokumentiert wird. Bin aber zu doof. Klappt nicht so.
Hat da jemand ne Idee?
Hier das Skript
$ComputerListe= Get-ADComputer -Server "dc1.test.loc" -SearchBase "OU=Server,DC=test,DC=loc" -Filter 'operatingsystem -like "*server*" -and enabled -eq "true"' -Properties * | Select-Object -expand Name
$BlackList = "*PS-*"
$ServerListe = $Computerliste | Where-Object {$_ -notlike $Blacklist} | sort
$FinalResult = @()
$date= Get-Date -Format dd-MM-yyyy_HH-mm
$Logpath = "D:\_LOG-Output"
$Counter= 0
foreach ($Server in $ServerListe) {
$counter++
Write-Progress -Activity 'Processing ShareEnumeration' -Status "Processing $($counter) of $($ServerListe.count)" -CurrentOperation $Server -PercentComplete (($counter / $ServerListe.count) * 100)
Write-Host "Server: $Server wird auf Freigaben gescannt..."
try{
$Shares = Get-SmbShare -CimSession $Server -ErrorAction SilentlyContinue | select Name,Path,ShareState,Description | Where-Object {$_.Name -ne "IPC$"}
$Ping = Test-Connection -Count 1 -ComputerName $Server -Quiet
}
catch{
Write-Host "Failed to connect retrieve Shares from $Server" -ForegroundColor Red
}
foreach($Share in $Shares){
$tempObj = "" | Select-Object Server,Online,Info,Beschreibung,FreigabeName,FreigabePfad,FreigabeBenutzer,Freigaberechte,NTFSPfad,NTFSBenutzer,NTFSRechte
try{
$Ping = Test-Connection -Count 1 -ComputerName $Server -Quiet
$ShareRights = Get-SmbShareAccess -CimSession $Server $Share.Name -ErrorAction Stop
$NTFS = Invoke-Command -Computer $Server -ArgumentList $Share,$NTFS -ScriptBlock{
param($Share,$NTFS)
Get-Acl $Share.Path -ErrorAction SilentlyContinue | select -Expand Access | Where-Object {$_.IdentityReference -Match "Jeder" -or $_.IdentityReference -match "test" -or $_.IdentityReference -match "VORDEFINIERT"}|
% { $Share.Path + "," + $_.IdentityReference + "," + $_.FileSystemRights }
}
$ACLList = @()
foreach($AclLine in $NTFS){
$tempList = "" | Select-Object Pfad,Benutzer,Rechte
$AclLine =$ACLLine.split(',')
$TempList.Pfad = $AclLine[0]
$TempList.Benutzer = $AclLine[1]
$TempList.Rechte = "Benutzer: " + $AclLine[1] + ", " + $AclLine[2] + ", " + $AclLine[3] + ", " + $AclLine[4]
$ACLList += $tempList}
# Erstelle Liste
# --------------
$tempObj.Server = $Server
$tempObj.Online = $ping
$tempObj.Info = ""
$tempObj.FreigabeName = $Share.Name
$tempObj.FreigabePfad = $Share.Path
$tempObj.Beschreibung = $Share.Description
$tempObj.FreigabeBenutzer = $ShareRights.AccountName -join "`n"
#$tempObj.Zugriffstyp = $ShareRights.AccessControlType -join " / "
$tempObj.Freigaberechte = $ShareRights.AccessRight -join "`n"
#$tempObj.NTFSACLs = ""#$NTFS -join " / "
$tempObj.NTFSPfad = $ACLList.Pfad -join "`n"
$tempObj.NTFSBenutzer = $ACLList.Benutzer -join "`n"
$tempObj.NTFSRechte = $ACLList.Rechte -join "`n"
$FinalResult += $tempObj
}
catch{
Write-Host "Failed to connect retrieve Share Details from $Server" -ForegroundColor Red
$Ping = Test-Connection -Count 1 -ComputerName $Server -Quiet
$tempObj.Server = $Server
$tempObj.Online = $ping
$tempObj.Info = "Manuell prüfen"
$FinalResult += $tempObj
}
}
}
$FinalResult | ft -AutoSize -Wrap -GroupBy Server
# HTML Header CSS Style zur besseren sichtbarkeit
$HtmlHead = '<style>
body {
background-color: white;
font-family: "Calibri";
}
table {
border-width: 1px;
border-style: solid;
border-color: black;
border-collapse: collapse;
width: 100%;
word-break: normal;
}
th {
border-width: 1px;
padding: 5px;
border-style: solid;
border-color: black;
background-color: #98C6F3;
}
td {
border-width: 1px;
padding: 5px;
border-style: solid;
border-color: black;
background-color: White;
}
tr {
text-align: left;
}
</style>'
$tableFragment = $FinalResult |ConvertTo-Html -Head $HTMLHead
$tableFragment | out-file "$Logpath\Dom-Share_Report-$Date.html" -Encoding UTF8
$FinalResult | Export-CSV "$Logpath\Dom-Share_report-$Date.csv" -Delimiter "`t" -Encoding unicode -NoTypeInformation -Force
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52953935343
Url: https://administrator.de/forum/freigaben-freigaberechte-und-acl-error-handling-52953935343.html
Ausgedruckt am: 22.12.2024 um 12:12 Uhr
1 Kommentar
Moin,
hier ein kleiner Ansatz für deine grauen Zellen:
Edit: ich habe deinen Code zuvor nicht geprüft, sehe aber, dass Du das eigentlich schon eingebaut hast. Zeile 18. Musst nur die Blöcke nun etwas herumschubsen an den richtigen Ort.
Viel Spaß + Erfolg
Gruß
hier ein kleiner Ansatz für deine grauen Zellen:
# Der Name des Zielcomputers
$computerName = "ZielComputerName" #anpassen auf deine Bedürfnisse
# Versucht, den Computer zu pingen
try {
$pingResult = Test-Connection -ComputerName $computerName -Count 1 -ErrorAction Stop
Write-Host "$computerName ist erreichbar." -ForegroundColor Green
# hier deinen "wenn ping erfolgreich" Code rein
}
catch {
# Wenn der Ping fehlschlägt, wird der Catch-Block ausgeführt
Write-Host "$computerName ist nicht erreichbar." -ForegroundColor Red
Write-Host "Script wird beendet" -ForegroundColor Red
}
Edit: ich habe deinen Code zuvor nicht geprüft, sehe aber, dass Du das eigentlich schon eingebaut hast. Zeile 18. Musst nur die Blöcke nun etwas herumschubsen an den richtigen Ort.
Viel Spaß + Erfolg
Gruß