Ich hatte heute das „Problem“ bei einem Kunden, dass ich einen Schlüssel in die Registry per Script laden sollte.
Es geht um den Trust Center, in dem man einen Pfad konfigurieren kann aus dem man „unsichere“ Access-Datenbanken ohne Hinweismeldung starten kann.

Der zu importierende Key wäre folgender:

Windows Registry Editor Version 5.00 
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office.0\Access\Security\Trusted Locations\Location0] 
"Path"="C:\\Users\\Knut.lixd\\AppData\\Roaming\\MyAccessApp\\"
"Description"=""
"Date"="16/06/2022 9:20"

Das Problem dabei: Im Pfad steht nicht nur mein Name Knut ( %username%) sondern auch die Domäne (lixd). Somit kann ich die Umgebungsvariable %Username% nicht einfach verwenden und muss mir dies anders zusammenbauen. Verwende ich %Userprofile%, dann fehlen mir die doppelten „\“.
Die Idee war nun aus %Userprofile% das C:\Users zu entfernen und in den String oben einzubauen.

Dies geht am einfachsten wie folgt:

@echo off
setlocal enabledelayedexpansion
set "uprofile=%userprofile%"
set "uprofile=!uprofile:C:\Users\=!"
echo %uprofile%

In der Variable die Variable uprofile kann ich nun weiter verwenden um mir eine Registry (trust.reg) Datei für den Import (reg Import trust.reg /reg:64) zu bauen:

:: Trustcenter bearbeiten
echo Bearbeite Trustcenter
echo Windows Registry Editor Version 5.00 > %temp%\trust.reg
echo [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office.0\Access\Security\Trusted Locations\Location0] >> %temp%\trust.reg
echo "Path"="C:\\Users\\%uprofile%\\AppData\\Roaming\\MyAccessApp\\"  >> %temp%\trust.reg
echo "Description"=""  >> %temp%\trust.reg
echo "Date"="16/06/2022 9:20"  >> %temp%\trust.reg
reg import %temp%\trust.reg /reg:64
del %temp%\trust.reg

Damit dies nicht bei jedem Batch lauf passiert sollte man sich entsprechende Marker setzten und entsprechend abfragen. Per Datei oder Registry Eintrag, je nach belieben. Dies beschreibe ich (vermutlich) man in einem anderen Beitrag.

Zwei Gedanken noch dazu:

  • Ist in der Registry Location0 schon vorhanden, so wird diese überschrieben. Das kann man sicherlich besser lösen, war bei dem Kunden mit komplett neuen Benutzerprofilen nicht von Relevanz.
  • Das Benutzerprofil muss nicht zwingender Weise auf C: liegen. Bei Servergespeicherten Profilen muss man den String anders zusammenbauen. ( set „uprofile=!uprofile:\=\\!“ )