Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.39 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement