FSLogix und Memtime: PowerShell Script
Dieses PowerShell-Skript kann Programmen wie Memtime, die eine Autostart-Funktion haben, dabei helfen, mit FSLogix-Profilen zu funktionieren.
Funktionen des Skripts
Das PowerShell-Skript erledigt dies sicher und automatisch:
- Beendet Memtime nur in der aktuellen Benutzer-Session
- Prüft Domain- und Benutzerzugehörigkeit
- Beeinträchtigt keine anderen Benutzer auf demselben Server
- Wartet, bis FSLogix meldet, dass das Profil für die aktuelle SID eingebunden ist
- Startet Memtime erst, nachdem das Profil bereit ist
- Funktioniert zuverlässig in Multi-User-RDS-Umgebungen
Speichern Sie das Skript als:
# ================================
# Start-Memtime-After-FSLogix.ps1
# (multi-user-sicher, FSLogix-wait)
# ================================
$ErrorActionPreference = "SilentlyContinue"
$memtimeExe = "C:\Program Files\memtime\memtime.exe"
$timeoutSec = 120
$sleepSec = 2
# Aktuellen Benutzer / SID
$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sid = $identity.User.Value
$domain = $env:USERDOMAIN
$user = $env:USERNAME
# --- Memtime nur für diesen User beenden (nicht andere Sessions) ---
Get-CimInstance Win32_Process -Filter "Name='memtime.exe'" |
ForEach-Object {
$owner = Invoke-CimMethod -InputObject $_ -MethodName GetOwner
if ($owner.Domain -eq $domain -and $owner.User -eq $user) {
Stop-Process -Id $_.ProcessId -Force
}
}
function Test-FSLogixProfileReady([string]$sid) {
$base = "HKLM:\SOFTWARE\FSLogix\Profiles\Sessions"
if (-not (Test-Path $base)) { return $false }
foreach ($k in Get-ChildItem $base) {
$p = Get-ItemProperty $k.PSPath
if ($p.Sid -eq $sid -and $p.ProfileImagePath -and $p.ProfileImagePath.Length -gt 3) {
return $true
}
}
return $false
}
# --- Warten bis FSLogix bereit ist (oder Timeout) ---
$deadline = (Get-Date).AddSeconds($timeoutSec)
while ((Get-Date) -lt $deadline) {
if (Test-FSLogixProfileReady $sid) { break }
Start-Sleep -Seconds $sleepSec
}
# --- Memtime starten (nur wenn nicht schon läuft) ---
$alreadyRunning = Get-CimInstance Win32_Process -Filter "Name='memtime.exe'" | ForEach-Object {
$owner = Invoke-CimMethod -InputObject $_ -MethodName GetOwner
($owner.Domain -eq $domain -and $owner.User -eq $user)
} | Where-Object { $_ } | Select-Object -First 1
if (-not $alreadyRunning) {
Start-Process -FilePath $memtimeExe
}
Deployment über GPO (Scheduled Task)
Das Skript kann als geplante Aufgabe über Gruppenrichtlinien bereitgestellt werden.
Pfad:
Benutzerkonfiguration → Einstellungen → Systemsteuerungseinstellungen → Geplante Aufgaben
Aktion
- Program: powershell.exe
- Argumente:
-NoProfile -ExecutionPolicy Bypass -File "\\DOMAIN\SYSVOL\DOMAIN\scripts\Start-Memtime-After-FSLogix.ps1"
-
Trigger: Bei Anmeldung
-
Optionen: Nur ausführen, wenn der Benutzer angemeldet ist
Wenn Sie weitere Unterstützung benötigen, können Sie sich jederzeit unter support@memtime.com an uns wenden.