# Installiere alle Mounts aus target.csv # Geprüft wird, ob das Laufwerk bereits vorhanden # 11.05.2025 da function Import-VMInfo { param ( [string]$Path ) if (Test-Path $Path) { return Get-Content -Path $Path -Raw | ConvertFrom-Json } else { Write-Error "Fehler beim Einlesen der VMInfo Datei ($Path nicht gefunden)." Write-Error "Tipp: Beim Neustart der VM wird diese Datei neu angelegt." Pause exit } } function Add-PathToQuickAccess([string[]]$path){ $path | %{ write-host "Adding path '$($_)' to Quick acccess list." -F Green try{ $link = (New-Object -Com Shell.Application).NameSpace($_).Self if(!$link){throw "Item path not valid to be pinned."} $link.Verbs()| ?{$_.Name.replace('&','') -match 'An Schnellzugriff anheften|Pin to Quick access'} | %{$_.DoIt()} }catch{ write-error "Error adding path. $($_.Exception.Message)" } } } $VMInfoPath = "Y:\.vminfo.json" # Schleife, die auf das Laufwerk wartet while (-not (Test-Path $VMInfoPath)) { Write-Host "Warte auf $VMInfoPath..." Start-Sleep -Seconds 1 } # VMInfo aus JSON File einlesen $VMInfo = Import-VMInfo -Path $VMInfoPath & $PSScriptRoot\injector.ps1 $VMInfo.krb5.cred $klistOutput = klist $serverping = Test-Connection -ComputerName "server.pn.steinbeis.schule" -Count 2 -Quiet if ($serverping) { if ($klistOutput -like "*Client*") { foreach ($Mount in $VMInfo.Mounts) { net use /persistent:no "$($Mount.Drive):" "$($Mount.RemotePath)" #New-SMBMapping -Localpath "$($Mount.Drive):" -Remotepath $Mount.RemotePath Write-Host("net use $($Mount.Drive): $($Mount.RemotePath)") } } else { #if (-not ($klistOutput -like "*Client*") -or (-not (Test-Path "H:"))) { $Credential = Get-Credential -Message "Die automatische Einbindung der Netzlaufwerke ist fehlgeschlagen.`nBitte geben Sie Ihre Anmeldeinformationen für das Netzlaufwerk ein" $VMInfo.User # Laufwerke einbinden foreach ($Mount in $VMInfo.Mounts) { net use /persistent:no "$($Mount.Drive):" "$($Mount.RemotePath)" /user:"$($Credential.UserName)" "$($Credential.GetNetworkCredential().Password)" Write-Host("net use /persistent:no `"$($Mount.Drive):`" `"$($Mount.RemotePath)`"") #New-SMBMapping -Localpath "$($Mount.Drive):" -Remotepath "$($Mount.RemotePath)" -UserName "$($Credential.UserName)" -Password "$($Credential.GetNetworkCredential().Password)" #Write-Host("New-SMBMapping -Localpath $($Mount.Drive): -Remotepath $Mount.RemotePath") } } } else { Add-Type -AssemblyName System.Windows.Forms $message = "Der Server kann derzeit nicht erreicht werden.`nDaher können die Netzlaufwerke derzeit nicht verbunden werden.`nVersuchen Sie es zu einem späteren Zeitpunkt erneut mit dem Skript: Netzlaufwerke-verbinden" $title = "Server nicht erreichbar" [System.Windows.Forms.MessageBox]::Show($message, $title, [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning) } # Ändere den Namen der Netzlaufwerke $shell = New-Object -ComObject Shell.Application foreach ($Mount in $VMInfo.Mounts) { $folder = $shell.Namespace("$($Mount.Drive):") if ($folder) { $folder.Self.Name = $Mount.Name Write-Host "Das Netzlaufwerk $($Mount.Drive): wurde in '$($Mount.Name)' umbenannt." } else { Write-Host "Fehler beim Zugriff auf das Netzlaufwerk." } } # Pfade zur Schnellzugriff hinzufügen Add-PathToQuickAccess $VMInfo.QuickAccess # Pfade für Standardorte ändern $regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" foreach ($USF in $VMInfo.UserShellFolders) { Write-Host "Set-ItemProperty -Path $regPath -Name $($USF.Name) -Value $($USF.Path)" Set-ItemProperty -Path $regPath -Name "$($USF.Name)" -Value "$($USF.Path)" } # Explorer Neustart erzwingen (evtl. nicht notwendig) Stop-Process -Name explorer -Force # Start-Process explorer # Bei Lehrern Papercut-Client starten if (($VMInfo.Groups -contains "teachers") -and -not (Get-Process -Name pc-client -ErrorAction SilentlyContinue)) { & "C:\custom\papercut\pc-client.exe" -m --user $VMInfo.User }