Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Skript zum anlegen von Teilnehmer mit dazugehörigen Ordner (Maßnahmeordner, Klassentauschverzeichnis, Teilnehmer-Ordner)
- # v.31.07.2017
- # Starten als Administrator
- # 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 }
- if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
- {
- $arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
- Start-Process powershell -Verb runAs -ArgumentList $arguments
- break
- }
- Import-Module ActiveDirectory
- $DOM=(Get-ADDomain).DistinguishedName
- $DOM2=(Get-WmiObject Win32_ComputerSystem).Domain
- $DC=(Get-ADDomainController).Name
- $OU=„OU=Teilnehmer,$DOM“
- $Laufwerk="Z:"
- $Profil=("\\"+$DC+"\Profile$\teilnehmer-profil")
- $Inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
- $Propagation = [system.security.accesscontrol.PropagationFlags]"None"
- $nl=([System.Environment]::NewLine)
- $Kontingentschwelle=199229440 #190Mb
- $Kontingentgrenze=209715200 #200Mb
- # Benutzer anlegen
- function userAD ($Login, $Vorname, $Nachname, $Gruppe)
- {
- if (kontoVorhanden $Login)
- {
- Remove-ADUser $Login -Confirm:$False
- Remove-SmbShare ($Login+"$") -Force
- }
- New-ADUser `
- -SamAccountName $Login `
- -UserPrincipalName ($Login+"@"+$DOM2) `
- -GivenName $Vorname `
- -Surname $Nachname `
- -Name ($Nachname+" "+$Vorname) `
- -DisplayName ($Nachname+" "+$Vorname) `
- -Description $Gruppe `
- -Path ("OU="+$Gruppe+",OU=Teilnehmer,"+$DOM) `
- -HomeDrive $Laufwerk `
- -HomeDirectory ("\\"+$DC+"\"+$Login+"$") `
- -ProfilePath $Profil `
- -PasswordNotRequired $True `
- -ChangePasswordAtLogon $True `
- -Enabled $True
- # Gruppenmitgliedschaft
- Add-ADGroupMember -Identity $("lg_"+$Gruppe) -Members $Login
- Add-ADGroupMember -Identity Teilnehmer -Members $Login
- if (kontoVorhanden $Login)
- {
- Write-Host "Der Benutzer $($Vorname+" "+$Nachname) ist in AD angelegt"
- }
- }
- # OU und Gruppe prüfen und falls nicht vorhanden erstellen
- function OUundGruppeAD ($Gruppe)
- {
- if(!(Get-ADOrganizationalUnit -Filter 'name -eq $Gruppe'))
- {
- New-ADOrganizationalUnit -Name $Gruppe -Description Klassencontainer -Path $OU -ProtectedFromAccidentalDeletion $False
- }
- # Get-ADGroup -Filter 'Name -eq ("lg_"+$Gruppe)'
- try
- {
- Get-ADGroup $("lg_"+$Gruppe) | Out-Null
- }
- catch
- {
- New-ADGroup ("lg_"+$Gruppe) -GroupScope DomainLocal -Description $Gruppe -Path ("OU="+$Gruppe+","+$OU)
- }
- }
- # Freigabe erstellen
- function userFreigabe ($Login, $Gruppe)
- {
- if (kontoVorhanden $Login)
- {
- $Pfad=("D:\Mitarbeiter\Teilnehmer\"+$Gruppe+"\"+$Login)
- New-SmbShare $Pfad -Name ($Login+"$") -Description ($Login+"$") -FullAccess Administratoren,IT-Administratoren -ChangeAccess Mitarbeiter,Freiberufler,Leitung,$Login | Out-Null
- Write-Host "Die Freigabe ist angelegt $nl"
- }
- }
- # ordner erstellen
- function userOrdner ($Login, $Gruppe)
- {
- # Maßnahmeordner
- $PfadMO="D:\Mitarbeiter\Maßnahmen\$Gruppe"
- if(!(Test-Path $PfadMO))
- {
- new-item $PfadMO -type directory | Out-Null
- # Berechtigungen setzen: Maßnahmeordner
- berechtigungen $PfadMO @{Administratoren="FullControl";"IT-Administratoren"="FullControl";("lg_"+$Gruppe)="Modify";Leitung="Modify";"Verwaltung-Maßnahmen"="Modify"}
- Write-Host "$PfadMO ist angelegt"
- }
- # Klassentauschverzeichnis
- $PfadKTV="D:\Mitarbeiter\Teilnehmer\_Klassentauschverzeichnisse\$Gruppe"
- if(!(Test-Path $PfadKTV))
- {
- new-item $PfadKTV -type directory | Out-Null
- # Berechtigungen setzen: Klassentauschverzeichnis
- berechtigungen $PfadKTV @{Administratoren="FullControl";"IT-Administratoren"="FullControl";("lg_"+$Gruppe)="Modify";Leitung="Modify"}
- berechtigungen $PfadKTV @{Teilnehmer="Write"} $False Deny
- Write-Host "$PfadKTV ist angelegt"
- }
- # Teilnehmer Maßnahmeordner
- $PfadTMO="D:\Mitarbeiter\Teilnehmer\$Gruppe"
- if(!(Test-Path $PfadTMO))
- {
- new-item $PfadTMO -type directory | Out-Null
- # Berechtigungen setzen: Teilnehmerordner
- berechtigungen $PfadTMO @{Administratoren="FullControl";"IT-Administratoren"="FullControl";("lg_"+$Gruppe)="ReadAndExecute";Leitung="ReadAndExecute"}
- Write-Host "$PfadTMO ist angelegt"
- }
- # Teilnehmerordner
- if (kontoVorhanden $Login)
- {
- $PfadTO="D:\Mitarbeiter\Teilnehmer\"+$Gruppe+"\"+$Login
- if(!(Test-Path $PfadTO))
- {
- new-item $PfadTO -type directory | Out-Null
- # Berechtigungen setzen: Teilnehmerordner
- berechtigungen $PfadTO @{Administratoren="FullControl";"IT-Administratoren"="FullControl";$Login="Modify";Leitung="Modify";Mitarbeiter="Modify";Freiberufler="Modify"}
- Write-Host "$PfadTO ist angelegt"
- }
- # Kontingent setzen
- fsutil quota modify d: $Kontingentschwelle $Kontingentgrenze $Login
- }
- }
- # Berechtigungen setzen
- # Ordner-Berechtigungen:
- # FullControl = Vollzugriff
- # Modify = Ändern
- # ReadAndExecute = Lesen und Ausführen
- # https://technet.microsoft.com/en-us/library/ff730951.aspx
- # Parameter:
- # $ordner-Pfad; $hash-Konto oder Gruppe mit Berechtigungen; $loeschen-alle vorherige berechtigungen löschen?; $allowdeny-Erlauben oder Verbitten (Allow oder Deny)
- function berechtigungen ($ordner, $hash, $loeschen=$True, $allowdeny="Allow")
- {
- if(Test-Path $ordner)
- {
- $ACL = Get-Acl $ordner
- $ACL.SetAccessRuleProtection($True, $False)
- if($loeschen)
- {
- ($ACL).Access | foreach {$ACL.PurgeAccessRules($_.IdentityReference)}
- }
- foreach ($p in $hash.GetEnumerator())
- {
- $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule($p.key, $p.value, $Inherit, $Propagation, $allowdeny)
- $ACL.SetAccessRule($AccessRule)
- }
- $ACL | Set-Acl $ordner
- }
- }
- # Konto vorhanden
- function kontoVorhanden ($Login)
- {
- try
- {
- $account = Get-ADUser $Login
- }
- catch
- {
- $account=$Null
- }
- return $account
- }
- # Skript start
- # .csv-Datei vorhanden?
- # Vorname,Nachname,Benutzername,Gruppe
- $allecsvDatei=Get-ChildItem "D:\Mitarbeiter\Maßnahmen\_Profilanforderungen\_*.csv"
- if($allecsvDatei)
- {
- foreach ($csvDatei in $allecsvDatei)
- {
- Write-Host -ForegroundColor Yellow $nl $csvDatei $nl
- $csvDateiTemp=Get-Content $csvDatei -Encoding:String
- $csvDateiTemp | Out-File $csvDatei -Encoding:UTF8
- $Import=Import-CSV "$csvDatei" -Delimiter ","
- Foreach ($user in $Import)
- {
- OUundGruppeAD $user.Gruppe
- userAD $user.Benutzername $user.Vorname $user.Nachname $user.Gruppe
- userOrdner $user.Benutzername $user.Gruppe
- userFreigabe $user.Benutzername $user.Gruppe
- }
- # Die .csv-Datei in Ordner "fertig" verschieben
- if(!(Test-Path ("D:\Mitarbeiter\Maßnahmen\_Profilanforderungen\fertig\"+$csvDatei.Name)))
- {
- Move-Item $csvDatei "D:\Mitarbeiter\Maßnahmen\_Profilanforderungen\fertig"
- }
- }
- Write-Host "Drücke eine beliebige Taste um forzufahren..."
- $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- }
- # Keine .csv-Datei, Manuelle Eingabe?
- else
- {
- [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
- [System.Windows.Forms.MessageBox]::Show("Es gibt keine .csv-Datei für die Profilanlegung.",".csv-Datei fehlt",0,[System.Windows.Forms.MessageBoxIcon]::Warning)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement