estefania
Goto Top

Kontingente über Powershell vergeben - Wie?

Hi

Ich möchte meinen neuen Windows Server komplett über PowerShell verwalten. Nun finde ich aber nicht die richtigen PowerShell Befehle um auf einem kompletten Datenträger die Kontingente zu vergeben.
Jeder soll auf dieser Partiton nur 10 GB Speicherplatz erhalten.

Kann mir jemand helfen? Der Befehl Set-FsrmQuota ist ja wohl eher für den Ressourcen-Manager gedacht aber was ich will ist was anderes.
In Windows auf der Gui sieht es wie folgt aus (hier mal ein Beispiel)
kontigente in windows

Content-ID: 82375293818

Url: https://administrator.de/forum/kontingente-ueber-powershell-vergeben-wie-82375293818.html

Ausgedruckt am: 22.12.2024 um 21:12 Uhr

Crusher79
Crusher79 25.01.2024 aktualisiert um 12:57:28 Uhr
Goto Top
colinardo
Lösung colinardo 25.01.2024 aktualisiert um 21:08:25 Uhr
Goto Top
Servus.
Hier ein Set meiner CMDLets für das Verwalten der Einträge:
# function to add disk quota entry
function New-DiskQuotaEntry {
    param(
        [parameter(mandatory=$true)][string]$account,
        [parameter(mandatory=$true)][string]$driveletter,
        [parameter(mandatory=$false)][uint64]$warninglimit = [uint64]::MaxValue,
        [parameter(mandatory=$false)][uint64]$limit = [uint64]::MaxValue
    )
    # get logical disk object 
    $disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceId = '$($driveletter -replace '^([a-z]):?$','$1:')'"  
    if(!$disk){
        throw "Logical Disk '$driveletter' does no exist."  
    }
    # get Win32_Account instance of the principal
    $principal = Get-CimInstance win32_Account -Filter "Name = '$account'"  
    if(!$principal){
        throw "Account '$account' does no exist."  
    }
    # create new quota entry CIM instance
    New-CimInstance -ClassName Win32_DiskQuota -Property @{Limit=[uint64]$limit;WarningLimit=[uint64]$warninglimit;QuotaVolume=[ref]$disk;User=[ref]$principal}
}

# function to remove disk quota entry
function Remove-DiskQuotaEntry {
    param(
        [parameter(mandatory=$true)][string]$account,
        [parameter(mandatory=$true)][string]$driveletter
    )
    # get logical disk object 
    $disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceId = '$($driveletter -replace '^([a-z]):?$','$1:')'"  
    if(!$disk){
        throw "Logical Disk '$driveletter' does no exist."  
    }
    # get Win32_Account instance of the principal
    $principal = Get-CimInstance win32_Account -Filter "Name = '$account'"  
    if(!$principal){
        throw "Account '$account' does no exist."  
    }
    $instance = Get-CimInstance Win32_DiskQuota | ?{$_.QuotaVolume.DeviceId -eq $disk.DeviceID -and $_.User.Name -eq $principal.Name}
    if ($instance){
	$instance | Remove-CimInstance
    }else{
        write-warning "Specified entry not found."  
    }
}

# change disk quota entry settings
function Set-DiskQuotaEntry {
    param(
        [parameter(mandatory=$true)][string]$account,
        [parameter(mandatory=$true)][string]$driveletter,
        [parameter(mandatory=$false)][uint64]$warninglimit = [uint64]::MaxValue,
        [parameter(mandatory=$false)][uint64]$limit = [uint64]::MaxValue
    )
    # get logical disk object 
    $disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceId = '$($driveletter -replace '^([a-z]):?$','$1:')'"  
    if(!$disk){
        throw "Logical Disk '$driveletter' does no exist."  
    }
    # get Win32_Account instance of the principal
    $principal = Get-CimInstance win32_Account -Filter "Name = '$account'"  
    if(!$principal){
        throw "Account '$account' does no exist."  
    }
    # get disk quota entry
    $instance = Get-CimInstance Win32_DiskQuota | ?{$_.QuotaVolume.DeviceId -eq $disk.DeviceID -and $_.User.Name -eq $principal.Name}
    if ($instance){
        # change CIM instance limits
	    $instance | Set-CimInstance -Property @{Limit=[uint64]$limit;WarningLimit=[uint64]$warninglimit} -PassThru
    }else{
        write-warning "Specified entry not found."    
    }
}

Anwendung der CMDLets
# add new entry
New-DiskQuotaEntry -account "BenutzerA" -driveletter C: -limit 10GB -warninglimit 9GB  

# change existing entry
Set-DiskQuotaEntry -account "BenutzerA" -driveletter C: -limit 5GB -warninglimit 4GB  

# remove existing entry
Remove-DiskQuotaEntry -account "BenutzerA" -driveletter C:  

Default Kontingente und aktivieren dieser kannst du auch per GPO erledigen



Grüße Uwe
Estefania
Estefania 26.01.2024 um 19:31:54 Uhr
Goto Top
Danke.

Also über Gruppenrichtlinien Quotas zu vergeben wäre schöner, aber geht das auch wenn ich es nur für ein Laufwerk einrichten möchte?
Kann ich außerdem dann auch noch einzelne User mit anderen Quotas belegen?

Außerde, könnte man das ganze auch über den Ressourcen Manager realisieren?
colinardo
colinardo 26.01.2024 aktualisiert um 19:40:41 Uhr
Goto Top
Zitat von @Estefania:

Danke.

Also über Gruppenrichtlinien Quotas zu vergeben wäre schöner, aber geht das auch wenn ich es nur für ein Laufwerk einrichten möchte?
Nein per Gruppenrichtlinie wird es automatisch auf allen lokalen Laufwerken aktiviert. Ansonsten musst du mit Skripts arbeiten.
Kann ich außerdem dann auch noch einzelne User mit anderen Quotas belegen?
Ja klar, siehe oben, dafür sind die lokalen Quotas ja gedacht um Ausnahmen der Standards zu setzen.
Außerde, könnte man das ganze auch über den Ressourcen Manager realisieren?
Ja sicher das wäre sowieso die präferierte Methode, das wolltest du ja oben nicht, warum auch immer?! 😶
Ich gebe ja Usern keinen Zugriff auf lokale Serverlaufwerke sondern primär legen diesen Dateien auf Freigaben ab und dafür ist der FSRM ja auch primär gedacht.
Estefania
Estefania 26.01.2024 um 21:16:30 Uhr
Goto Top
Außerde, könnte man das ganze auch über den Ressourcen Manager realisieren?
Ja sicher das wäre sowieso die präferierte Methode, das wolltest du ja oben nicht, warum auch immer?! 😶
Ich gebe ja Usern keinen Zugriff auf lokale Serverlaufwerke sondern primär legen diesen Dateien auf Freigaben ab und dafür ist der FSRM ja auch primär gedacht.

Ja ich möchte es auf ein Share verteilen. Jeder User soll 10 GB Speicherplatz bekommen. Aber wie mache ich es über FSRM.. um einzelne User auch mit mehr Speicher zu berechtigen?
colinardo
colinardo 26.01.2024 aktualisiert um 21:57:49 Uhr
Goto Top
Zitat von @Estefania:
Ja ich möchte es auf ein Share verteilen. Jeder User soll 10 GB Speicherplatz bekommen. Aber wie mache ich es über FSRM.. um einzelne User auch mit mehr Speicher zu berechtigen?
Indem du einen Ordner für den/die jeweiligen User schreibbar bereitstellst und auf diesem eine separate Quota für diesen Ordner(+Unterordner) erstellst.
Estefania
Estefania 27.01.2024 um 23:26:43 Uhr
Goto Top
Indem du einen Ordner für den/die jeweiligen User schreibbar bereitstellst und auf diesem eine separate Quota für diesen Ordner(+Unterordner) erstellst.

Ja das ist möglich, aber ich müsste es dann für alle User extra machen. Wenn man 100 User hat dann ist es wirklich mühselig.
colinardo
colinardo 28.01.2024 aktualisiert um 08:09:25 Uhr
Goto Top
Zitat von @Estefania:
Ja das ist möglich, aber ich müsste es dann für alle User extra machen. Wenn man 100 User hat dann ist es wirklich mühselig.
Erst redest du von Ausnahmen und jetzt sind es doch wieder alle User?
Wieso sollte das mühselig sein? Wenn es alle User sind brauchst du doch nur über den FSRM eine Auto-Quota anlegen die auf die Unterordner vererbt wird und schwubs sind die Ordner alle mit einem Klick damit versorgt.
Die Unterordner der User mit ACLs zu versehen ist ja mittels PS-Skript und Set-ACL ebenso ein Kinderspiel.
Wie man ACLs z.B. auch per CSV Dateien automatisch auf Ordner überträgt kannst du in diesem Beitrag nachlesen
Probleme beim Zuweisen von Gruppenberechtigungen mit PowerShell: Gruppen werden nicht korrekt in den Ordner eingetragen
Wenn das Homedirectories der User sein sollten, ist ja selbst das nicht mehr nötig weil diese ja automatisch schon mit den richtigen Rechten versehen werden wenn sie angelegt werden.

Die Mittel sind alle da, du musst sie nur anwenden 👍.

Viel Erfolg.
Grüße Uwe
Estefania
Estefania 28.01.2024 um 09:29:27 Uhr
Goto Top
Hallo Uwe.

Vielleicht habe ich etwas falsch verstanden. Heisst es also ich lege 10 GB auf den Share wo alle User ihre Unterordner haben und wenn einer der User mehr Speicherplatz zur Verfügung haben soltle, dann wird explizit nur für den einen User eine spezielle Regel, die die ursprüngliche in dem Sinne überschreibt !?

Ja es handelt sich um Homelaufwerke bei denen jeder Unterordner eine eigene Berechtigung hat.

Ich dachte wenn ich auf den Hauptshare die 10 GB Limitierung setze, dann können all diese User zusammen nur bis 10 GB den Speicherplatz auf dem Share belegen.
colinardo
colinardo 28.01.2024 aktualisiert um 10:23:25 Uhr
Goto Top
Zitat von @Estefania:

Hallo Uwe.

Vielleicht habe ich etwas falsch verstanden. Heisst es also ich lege 10 GB auf den Share wo alle User ihre Unterordner haben und wenn einer der User mehr Speicherplatz zur Verfügung haben soltle, dann wird explizit nur für den einen User eine spezielle Regel, die die ursprüngliche in dem Sinne überschreibt !?
Nein.
Auf das Share-Root legst du eine Quota die dieser Share maximal im Gesamten haben darf, also bei 100 Usern x 10GB = z.B. 1TB + Reserve für neue User, wobei diese Quota nicht zwingend erforderlich ist und nur das Share im Gesamten beschränkt wenn du das benötigst.
Für die User-Ordner legst du dann auf dem Share eine Auto-Quota mit einem 10GB Template an, die automatisch auf die Unterordner angewendet wird, somit wird jeder User auf 10GB in seinem Ordner beschränkt:

1000002929



Ja es handelt sich um Homelaufwerke bei denen jeder Unterordner eine eigene Berechtigung hat.
Gut dann sind die Berechtigungen ja bereits entsprechend vorhanden.
Ich dachte wenn ich auf den Hauptshare die 10 GB Limitierung setze, dann können all diese User zusammen nur bis 10 GB den Speicherplatz auf dem Share belegen.
Wenn du nur diese eine Quota setzen würdest dann ja, aber man arbeitet hier mit den Quotas verschachtelt von den tieferen Ebenen nach Oben.

Jetzt klarer?
Estefania
Estefania 28.01.2024 um 10:53:48 Uhr
Goto Top
Ja jetzt wird es klarer. Ich habe auf den Punkt "Vorlage autom. anwenden, Kontigente in Unterordnern erstellen)
Nun ist klar, dass jeder der Unterordner unter dem Hauptshare, nur bis zu 10 GB beschrieben werden kann.

Hätte nur noch 2 Fragen

1. Kann ich irgendwo sehen welcher User wieviel Speicher belegt bzw. wann sein Speicherplatz ausgeht?
2. Wie stellt man es dann bei dem gleichen Share ein, wenn ein bestimmter User z.B. 20 GB Speicherplatz erhalten soll... Damit meine ich Ausnahmen
colinardo
Lösung colinardo 28.01.2024 aktualisiert um 12:13:39 Uhr
Goto Top
Zitat von @Estefania:
1. Kann ich irgendwo sehen welcher User wieviel Speicher belegt bzw. wann sein Speicherplatz ausgeht?
Ja im FSRM kannst du auch die Statistik zu jeder Quota einsehen die Property Quota usage zeigt dir wie viel dort bereits belegt ist.
Zusätzlich kannst du dich oder den User benachrichtigen lassen oder Skripte starten wenn der Speicher zur Neige geht.
Steht eigentlich alles schön in der Dokumentation zum FSRM
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fsrm/59 ...
2. Wie stellt man es dann bei dem gleichen Share ein, wenn ein bestimmter User z.B. 20 GB Speicherplatz erhalten soll... Damit meine ich Ausnahmen
Habe ich doch oben eigentlich schon geschrieben, auf dem Ordner eine separate Quota erstellen und die automatisch generierte entfernen.
Estefania
Estefania 28.01.2024 um 20:20:27 Uhr
Goto Top
Ja im FSRM kannst du auch die Statistik zu jeder Quota einsehen die Property Quota usage zeigt dir wie viel dort bereits belegt ist.
Jetzt sehe ich es. Man muss nach dem Erstellen ein mal die Übersicht aktualisieren, damit auhc die einzelnen Unterordner angezeigt werden.

Habe ich doch oben eigentlich schon geschrieben, auf dem Ordner eine separate Quota erstellen und die automatisch generierte entfernen.
Alle User haben als Standard die 10 GB Speicherplatz erhalten. Ich habe dann mit einem Doppelklick auf einen User die Möglichkeit gehabt dort anderen Wert einzugeben. Ich hoffe dass es so richtig war.

Was ist eigentlich der Vorteil von FSRM gegenüber den bisher genutzten Quotas auf eine komplette Partition?

Danke schon mal
colinardo
colinardo 28.01.2024 aktualisiert um 20:58:21 Uhr
Goto Top
Was ist eigentlich der Vorteil von FSRM gegenüber den bisher genutzten Quotas auf eine komplette Partition?
Der größte Vorteil ist die Granularität auf Ordner- statt auf Partitionsebene, zusätzliche Überwachungsoptionen und die erweiterten Features fürs Skripting.
Estefania
Estefania 29.01.2024 um 09:06:57 Uhr
Goto Top
Vielen Dank nochmals euch allen für die Hilfe.

Liebe Grüsse