
- Replace bind-mounts on /lmn/media/$USER with separate mounting for Home and Share SMB shares in the VM. - Update vm-run to start virtiofsd with /lmn/media/$USER (/home/$USER on localhome machines). - Use vm-vminfo to generate a JSON file containing user information, including Username, Groups, printer list krb5-ticket and some more - Configure vminfo.service (systemd-timer) to periodically call vm-vminfo. - Ensure krb5-ticket (TGT) is injected into the Windows VM. - Mount SMB-Home and SMB-Share shares as part of the new structure.
102 lines
4.1 KiB
PowerShell
102 lines
4.1 KiB
PowerShell
# 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
|
|
}
|