Powershell: Netzlaufwerk für spezifische Gruppe erstellen
Hallo Zusammen
Ich arbeite in meiner Testgruppe gerade an einem Login-Script. Das Ziel soll sein, ein Netzlaufwerk hinzuzuüfgen, wenn der Benutzer einer bestimmten Gruppe angehört. Soweit bin ich bisher:
Nun habe ich aber folgendes Problem: Wenn ich die Gruppenabfrage mache, übernimmt nur den ersten Gruppenname (In diesem Fall Administrator, da ich als Administrator eingeloggt bin). Die einzige Lösung bisher die ich gefunden habe, wäre die Gruppennamen in einem CSV abzuspeichern und von dort die Namen wieder einzulesen. Gäbe es noch eine andere Möglichkeit?
Besten Dank für Eure Hilfe.
Gruss
gabeBU
Ich arbeite in meiner Testgruppe gerade an einem Login-Script. Das Ziel soll sein, ein Netzlaufwerk hinzuzuüfgen, wenn der Benutzer einer bestimmten Gruppe angehört. Soweit bin ich bisher:
#Keine Fehler
$ErrorActionPreference = 'SilentlyContinue'
#Benutzername ermitteln
$username = $env:Username
#Gruppen ermitteln
$group = Get-ADPrincipalGroupMembership -Identity $username | select Name | Sort Name
#Überprüfen, ob Ordner existiert
$testpath = Test-Path \\Gabesrv02\home\$username
if($testpath -eq $True)
{
}
else
{
#Ordner erstellen
md \\GABESRV02\home\$username
#Berechtigungen erteilen
$Acl = Get-Acl "\\GABESRV02\home\$username"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("$username", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "\\GABESRV02\home\$username" $Acl
$Acl = Get-Acl "\\GABESRV02\home\$username"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrator", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "\\GABESRV02\home\$username" $Acl
}
#Gemeinsames Netzlaufwerk erstellen
if ( $groupsort = "Administrator")
{
net use x: \\GABESRV02\gabenetshare\Admin /persistent:yes
}
elseif ($group = "Marketing")
{
net use x: \\GABESRV02\gabenetshare\Marketing /persistent:yes
}
elseif ($group = "Mitarbeiter")
{
net use x: \\GABESRV02\gabenetshare\Mitarbeiter /persistent:yes
}
else
{
exit
}
Nun habe ich aber folgendes Problem: Wenn ich die Gruppenabfrage mache, übernimmt nur den ersten Gruppenname (In diesem Fall Administrator, da ich als Administrator eingeloggt bin). Die einzige Lösung bisher die ich gefunden habe, wäre die Gruppennamen in einem CSV abzuspeichern und von dort die Namen wieder einzulesen. Gäbe es noch eine andere Möglichkeit?
Besten Dank für Eure Hilfe.
Gruss
gabeBU
Please also mark the comments that contributed to the solution of the article
Content-ID: 378881
Url: https://administrator.de/contentid/378881
Printed on: October 15, 2024 at 03:10 o'clock
7 Comments
Latest comment
Hi,
da hast Du einen Designfehler.
Erstmal verwendest Du zwischendurch "$groupsort" und dann wieder "$group".
Zweitens wertet "If ... ElseIf ..." natürlich nur eine der zutreffenden Bedingungen aus. Also statt "ElseIf" das erste "If" mit "}" abschließen und neu mit "If" abfragen.
Dann ist doch $Group ein Array? Also musst Du doch auch jedes Element einzeln abfragen? Also mit "ForEach" eine Schleife durchlaufen.
Soviel auf die Schnelle.
E.
Edit:
Ich sehe gerade: Ein Laufwerk. Dann statt der "If" ein "Switch". (z.B.: https://www.script-example.com/PowerShell-if)
da hast Du einen Designfehler.
Erstmal verwendest Du zwischendurch "$groupsort" und dann wieder "$group".
Zweitens wertet "If ... ElseIf ..." natürlich nur eine der zutreffenden Bedingungen aus. Also statt "ElseIf" das erste "If" mit "}" abschließen und neu mit "If" abfragen.
Dann ist doch $Group ein Array? Also musst Du doch auch jedes Element einzeln abfragen? Also mit "ForEach" eine Schleife durchlaufen.
Soviel auf die Schnelle.
E.
Edit:
Ich sehe gerade: Ein Laufwerk. Dann statt der "If" ein "Switch". (z.B.: https://www.script-example.com/PowerShell-if)
Moin,
Du musst das Erstellen des Verzeichnisses und das Einstellen der Rechte vom Mappen ("net use...") trennen. Das Anlegen muss vom Admin ausgeführt werden, das mappen vom Benutzer.
Wobei man das mappen heutzutage per GPO und nicht mehr per Script erledigt.
Über den Code-"Styl" sag' ich jetzt lieber nichts .)
lg,
Slainte
Ich arbeite in meiner Testgruppe gerade an einem Login-Script. Das Ziel soll sein, ein Netzlaufwerk hinzuzufügen, wenn der Benutzer einer
bestimmten Gruppe angehört. Soweit bin ich bisher:
Also ich glaube du hast das Konzept nicht so ganz im Griff...bestimmten Gruppe angehört. Soweit bin ich bisher:
Du musst das Erstellen des Verzeichnisses und das Einstellen der Rechte vom Mappen ("net use...") trennen. Das Anlegen muss vom Admin ausgeführt werden, das mappen vom Benutzer.
Wobei man das mappen heutzutage per GPO und nicht mehr per Script erledigt.
Über den Code-"Styl" sag' ich jetzt lieber nichts .)
lg,
Slainte
Moin,
Warum zweimal? Ich nehme mal die zweite Zeile.
Nein. Das muss heißen:
Überflüssig. Das musst Du bei einer while-Schleife machen. Die foreach-Schleife hat keine Zählervariable.
Hier eine kleine Übersicht über Schleifen in der PS: https://www.script-example.com/Powershell-Loops-Array
hth
Erik
$group = Get-ADPrincipalGroupMembership -Identity $username | select Name | Sort Name
$groupsort = Get-ADPrincipalGroupMembership -Identity $username
$groupsort = Get-ADPrincipalGroupMembership -Identity $username
Warum zweimal? Ich nehme mal die zweite Zeile.
foreach($i in $group)
Nein. Das muss heißen:
foreach ($group in $groupsort)
{
if ( $group = "Administratoren")
{
net use x: \\GABESRV02\gabenetshare\Admin /persistent:yes
}
if ($group = "Marketing")
{
net use x: \\GABESRV02\gabenetshare\Marketing /persistent:yes
}
if ($group = "Mitarbeiter")
{
net use x: \\GABESRV02\gabenetshare\Mitarbeiter /persistent:yes
}
$i + 1
}
if ( $group = "Administratoren")
{
net use x: \\GABESRV02\gabenetshare\Admin /persistent:yes
}
if ($group = "Marketing")
{
net use x: \\GABESRV02\gabenetshare\Marketing /persistent:yes
}
if ($group = "Mitarbeiter")
{
net use x: \\GABESRV02\gabenetshare\Mitarbeiter /persistent:yes
}
$i + 1
}
Überflüssig. Das musst Du bei einer while-Schleife machen. Die foreach-Schleife hat keine Zählervariable.
Hier eine kleine Übersicht über Schleifen in der PS: https://www.script-example.com/Powershell-Loops-Array
hth
Erik
Ne, sorry, so wird das nix...
Also...
1. das foresch braucht man gar nicht, man kann direkt mit $group.Contains("Marketing") prüfen ob der string im Array ist.
2. Das "=" ist eine Zuweisung. Einen Vergleich macht man in PS mit "-eq"
foreach ($group in $groupsort)
if ($group = "Marketing")
if ($group = "Marketing")
Also...
1. das foresch braucht man gar nicht, man kann direkt mit $group.Contains("Marketing") prüfen ob der string im Array ist.
2. Das "=" ist eine Zuweisung. Einen Vergleich macht man in PS mit "-eq"
if($testpath -eq $True)
Anstatt true abzugfragen und dann nur im "else"-Fall was zu machen, frägst du besser gleich false ab...