SHARE
TWEET

Untitled

a guest Aug 20th, 2019 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Skript zum anlegen von Teilnehmer mit dazugehörigen Ordner (Maßnahmeordner, Klassentauschverzeichnis, Teilnehmer-Ordner)
  2. # v.31.07.2017
  3.  
  4. # Starten als Administrator
  5. # ab PS 3.0 if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs }
  6.  
  7. if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
  8. {
  9.     $arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
  10.     Start-Process powershell -Verb runAs -ArgumentList $arguments
  11.     break
  12. }
  13.  
  14. Import-Module ActiveDirectory
  15.  
  16. $DOM=(Get-ADDomain).DistinguishedName
  17. $DOM2=(Get-WmiObject Win32_ComputerSystem).Domain
  18. $DC=(Get-ADDomainController).Name
  19. $OU=„OU=Teilnehmer,$DOM“
  20. $Laufwerk="Z:"
  21. $Profil=("\\"+$DC+"\Profile$\teilnehmer-profil")
  22. $Inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
  23. $Propagation = [system.security.accesscontrol.PropagationFlags]"None"
  24. $nl=([System.Environment]::NewLine)
  25. $Kontingentschwelle=199229440 #190Mb
  26. $Kontingentgrenze=209715200 #200Mb
  27.  
  28.  
  29. # Benutzer anlegen
  30.  
  31. function userAD ($Login, $Vorname, $Nachname, $Gruppe)
  32. {
  33.     if (kontoVorhanden $Login)
  34.     {
  35.         Remove-ADUser $Login -Confirm:$False
  36.         Remove-SmbShare ($Login+"$") -Force
  37.     }
  38.  
  39.     New-ADUser `
  40.     -SamAccountName $Login `
  41.     -UserPrincipalName ($Login+"@"+$DOM2) `
  42.     -GivenName $Vorname `
  43.     -Surname $Nachname `
  44.     -Name ($Nachname+" "+$Vorname) `
  45.     -DisplayName ($Nachname+" "+$Vorname) `
  46.     -Description $Gruppe `
  47.     -Path ("OU="+$Gruppe+",OU=Teilnehmer,"+$DOM) `
  48.     -HomeDrive $Laufwerk `
  49.     -HomeDirectory ("\\"+$DC+"\"+$Login+"$") `
  50.     -ProfilePath $Profil `
  51.     -PasswordNotRequired $True `
  52.     -ChangePasswordAtLogon $True `
  53.     -Enabled $True
  54.  
  55.     # Gruppenmitgliedschaft
  56.     Add-ADGroupMember -Identity $("lg_"+$Gruppe) -Members $Login
  57.     Add-ADGroupMember -Identity Teilnehmer -Members $Login
  58.  
  59.     if (kontoVorhanden $Login)
  60.     {
  61.         Write-Host "Der Benutzer $($Vorname+" "+$Nachname) ist in AD angelegt"
  62.     }
  63. }
  64.  
  65.  
  66. # OU und Gruppe prüfen und falls nicht vorhanden erstellen
  67.  
  68. function OUundGruppeAD ($Gruppe)
  69. {
  70.     if(!(Get-ADOrganizationalUnit -Filter 'name -eq $Gruppe'))
  71.     {
  72.         New-ADOrganizationalUnit -Name $Gruppe -Description Klassencontainer -Path $OU -ProtectedFromAccidentalDeletion $False
  73.     }
  74.  
  75.    
  76. # Get-ADGroup -Filter 'Name -eq ("lg_"+$Gruppe)'
  77.     try
  78.     {
  79.         Get-ADGroup $("lg_"+$Gruppe) | Out-Null
  80.     }
  81.     catch
  82.     {
  83.         New-ADGroup ("lg_"+$Gruppe) -GroupScope DomainLocal -Description $Gruppe -Path ("OU="+$Gruppe+","+$OU)
  84.     }
  85. }
  86.  
  87.  
  88. # Freigabe erstellen
  89.  
  90. function userFreigabe ($Login, $Gruppe)
  91. {
  92.     if (kontoVorhanden $Login)
  93.     {
  94.         $Pfad=("D:\Mitarbeiter\Teilnehmer\"+$Gruppe+"\"+$Login)
  95.         New-SmbShare $Pfad -Name ($Login+"$") -Description ($Login+"$") -FullAccess Administratoren,IT-Administratoren -ChangeAccess Mitarbeiter,Freiberufler,Leitung,$Login | Out-Null
  96.         Write-Host "Die Freigabe ist angelegt $nl"
  97.     }
  98. }
  99.  
  100.  
  101. # ordner erstellen
  102.  
  103. function userOrdner ($Login, $Gruppe)
  104. {
  105.     # Maßnahmeordner
  106.  
  107.     $PfadMO="D:\Mitarbeiter\Maßnahmen\$Gruppe"
  108.  
  109.     if(!(Test-Path $PfadMO))
  110.     {
  111.         new-item $PfadMO -type directory | Out-Null
  112.  
  113.         # Berechtigungen setzen: Maßnahmeordner
  114.  
  115.         berechtigungen $PfadMO @{Administratoren="FullControl";"IT-Administratoren"="FullControl";("lg_"+$Gruppe)="Modify";Leitung="Modify";"Verwaltung-Maßnahmen"="Modify"}
  116.  
  117.         Write-Host "$PfadMO ist angelegt"
  118.     }
  119.  
  120.     # Klassentauschverzeichnis
  121.  
  122.     $PfadKTV="D:\Mitarbeiter\Teilnehmer\_Klassentauschverzeichnisse\$Gruppe"
  123.  
  124.     if(!(Test-Path $PfadKTV))
  125.     {
  126.         new-item $PfadKTV -type directory | Out-Null
  127.  
  128.         # Berechtigungen setzen: Klassentauschverzeichnis
  129.  
  130.         berechtigungen $PfadKTV @{Administratoren="FullControl";"IT-Administratoren"="FullControl";("lg_"+$Gruppe)="Modify";Leitung="Modify"}
  131.         berechtigungen $PfadKTV @{Teilnehmer="Write"} $False Deny
  132.  
  133.         Write-Host "$PfadKTV ist angelegt"
  134.     }
  135.  
  136.     # Teilnehmer Maßnahmeordner
  137.  
  138.     $PfadTMO="D:\Mitarbeiter\Teilnehmer\$Gruppe"
  139.  
  140.     if(!(Test-Path $PfadTMO))
  141.     {
  142.         new-item $PfadTMO -type directory | Out-Null
  143.  
  144.         # Berechtigungen setzen: Teilnehmerordner
  145.  
  146.         berechtigungen $PfadTMO @{Administratoren="FullControl";"IT-Administratoren"="FullControl";("lg_"+$Gruppe)="ReadAndExecute";Leitung="ReadAndExecute"}
  147.  
  148.         Write-Host "$PfadTMO ist angelegt"
  149.     }
  150.  
  151.     # Teilnehmerordner
  152.  
  153.    
  154.     if (kontoVorhanden $Login)
  155.     {
  156.         $PfadTO="D:\Mitarbeiter\Teilnehmer\"+$Gruppe+"\"+$Login
  157.  
  158.         if(!(Test-Path $PfadTO))
  159.         {
  160.             new-item $PfadTO -type directory | Out-Null
  161.  
  162.             # Berechtigungen setzen: Teilnehmerordner
  163.  
  164.             berechtigungen $PfadTO @{Administratoren="FullControl";"IT-Administratoren"="FullControl";$Login="Modify";Leitung="Modify";Mitarbeiter="Modify";Freiberufler="Modify"}
  165.  
  166.             Write-Host "$PfadTO ist angelegt"
  167.         }
  168.  
  169.         # Kontingent setzen
  170.         fsutil quota  modify d: $Kontingentschwelle $Kontingentgrenze $Login
  171.     }
  172. }
  173.  
  174.  
  175. # Berechtigungen setzen
  176. # Ordner-Berechtigungen:
  177. # FullControl = Vollzugriff
  178. # Modify = Ändern
  179. # ReadAndExecute = Lesen und Ausführen
  180. # https://technet.microsoft.com/en-us/library/ff730951.aspx
  181. # Parameter:
  182. # $ordner-Pfad; $hash-Konto oder Gruppe mit Berechtigungen; $loeschen-alle vorherige berechtigungen löschen?; $allowdeny-Erlauben oder Verbitten (Allow oder Deny)
  183.  
  184. function berechtigungen ($ordner, $hash, $loeschen=$True, $allowdeny="Allow")
  185. {
  186.     if(Test-Path $ordner)
  187.     {
  188.         $ACL = Get-Acl $ordner
  189.         $ACL.SetAccessRuleProtection($True, $False)
  190.  
  191.         if($loeschen)
  192.         {
  193.             ($ACL).Access | foreach {$ACL.PurgeAccessRules($_.IdentityReference)}
  194.         }
  195.  
  196.         foreach ($p in $hash.GetEnumerator())
  197.         {
  198.             $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule($p.key, $p.value, $Inherit, $Propagation, $allowdeny)
  199.             $ACL.SetAccessRule($AccessRule)
  200.         }
  201.  
  202.         $ACL | Set-Acl $ordner
  203.     }
  204. }
  205.  
  206.  
  207. # Konto vorhanden
  208.  
  209. function kontoVorhanden ($Login)
  210. {
  211.     try
  212.     {
  213.         $account = Get-ADUser $Login
  214.     }
  215.  
  216.     catch
  217.     {
  218.         $account=$Null
  219.     }
  220.  
  221.     return $account
  222.  
  223. }
  224.  
  225.  
  226. # Skript start
  227.  
  228. # .csv-Datei vorhanden?
  229. # Vorname,Nachname,Benutzername,Gruppe
  230.  
  231. $allecsvDatei=Get-ChildItem "D:\Mitarbeiter\Maßnahmen\_Profilanforderungen\_*.csv"
  232.  
  233. if($allecsvDatei)
  234. {
  235.     foreach ($csvDatei in $allecsvDatei)
  236.     {
  237.  
  238.         Write-Host -ForegroundColor Yellow $nl $csvDatei $nl
  239.  
  240.         $csvDateiTemp=Get-Content $csvDatei -Encoding:String
  241.         $csvDateiTemp | Out-File $csvDatei -Encoding:UTF8
  242.         $Import=Import-CSV "$csvDatei" -Delimiter ","
  243.  
  244.         Foreach ($user in $Import)
  245.         {
  246.             OUundGruppeAD $user.Gruppe
  247.             userAD $user.Benutzername $user.Vorname $user.Nachname $user.Gruppe
  248.             userOrdner $user.Benutzername $user.Gruppe
  249.             userFreigabe $user.Benutzername $user.Gruppe
  250.         }
  251.  
  252.         # Die .csv-Datei in Ordner "fertig" verschieben
  253.         if(!(Test-Path ("D:\Mitarbeiter\Maßnahmen\_Profilanforderungen\fertig\"+$csvDatei.Name)))
  254.         {
  255.             Move-Item $csvDatei "D:\Mitarbeiter\Maßnahmen\_Profilanforderungen\fertig"
  256.         }
  257.     }
  258.    
  259.     Write-Host "Drücke eine beliebige Taste um forzufahren..."
  260.     $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
  261. }
  262.  
  263. # Keine .csv-Datei, Manuelle Eingabe?
  264.  
  265. else
  266. {
  267.     [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
  268.     [System.Windows.Forms.MessageBox]::Show("Es gibt keine .csv-Datei für die Profilanlegung.",".csv-Datei fehlt",0,[System.Windows.Forms.MessageBoxIcon]::Warning)
  269. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top