Click here to return to the KiXtart HelpDesk main page...

KiXtart Script Depot

Exchange Roaming User

; ScriptNavn:  RoamingExchange.kix
; Lavet af:     Lars Kim Lund
; Dato:          28.06.1999     
; Beskrivelse: Exchange Roaming User Setup.
;
; Der er flere metoder til at få Exchange indstillinger til at 'roame'.
; Microsoft har lavet et lille program der hedder 'profgen.exe', der kan benyttes til formålet.
; Det er dog efter min mening mangelfuldt så jeg har derfor programmeret det i KIX istedet.
; Scriptet benytter en profilskabelon (default.prf) der kan findes på Exchange klient CD-rommen
; samt 'newprof.exe', der er en del af Exchange klienten. 
;
; Da Exchange af uvisse årsager foretager en konvertering af danske karakterer når den gemmes
; i registry har det været nødvendigt at foretage en tegnkonvertering. Endvidere vil den opmærksomme
; læser bemærke at visse dele af scriptet sørger for at emigreringen til Roaming User forløber automatisk.
; De dele kan naturligvis udelades når det er sikkert at alle brugere er blevet 'konverteret'.
;
; Når man ikke bruger profiles og derfor ikke foretager replikering mellem klient og homedirectory ved login
; og logoff så er det meget svært at få de lokale indstillinger til at 'roame'. Herunder f.eks. autosignaturen.


$space="        "
?""

; Find default profile...

?"Configuring Exchange..."

$regbase="HKEY_USERS\.DEFAULT\Software\Microsoft\Windows Messaging Subsystem\Profiles"
$regkey="DefaultProfile"
$profil_def=readvalue($regbase,$regkey)

; Scan for existing .pab file...

?$space+"The active profile is $profil_def"

; Converting profile-name. You might want to add ä, ü etc...

$linecount=1
$profil_tmp=""
while $linecount<=len($profil_def)
    $char=substr($profil_def,$linecount,1)
    select
        case $char="æ" $char="[v~"
        case $char="ø" $char="[x&"
        case $char="å" $char="[u~"
        case $char="Æ" $char="[v|"
        case $char="Ø" $char="[x}"
        case $char="Å" $char="[u|"
    endselect
    $profil_tmp=$profil_tmp+$char
    $linecount=$linecount+1 
loop

$profil_def=$profil_tmp
$index=0

:loop1
$key=enumkey("$regbase\$profil_def",$Index)
If @error=0
    $check_base="$regbase\$profil_def\$key"
    $check_key="001e6600"
    $check_val=readvalue($check_base,$check_key)
    if @error=0
        $profil_pab=$check_val
        ?$space+"Address Book found, $profil_pab"
        goto loop1_out
    endif
    $index=$index + 1
    goto loop1
endif

:loop1_out

;?$space+"Address Book found, $profil_pab"

; Searching for the right profile...

$index=0

:loop2
$key=enumkey($regbase,$index)
If @error=0
    if $key=@userid
        ?$space+"The profile @userid has been activated."
        $res=writevalue($regbase,$regkey,@userid,"reg_sz")
        goto no_profile
    endif
    $index=$index+1
    goto loop2
endif

; Check if .pab file is local...

$home="h:\@userid\_profil\exchange"

use h: @homeshr

$check_lokal=substr($profil_pab,1,1)

if ($check_lokal<>"c") or ($profil_pab="")
    goto no_copy
endif

; If local and if user does not have .pab on server, local .pab is beeing copied...

if exist("$home\@userid.pab")<>1
    ?$space+"Copying: $profil_pab"
    copy "$profil_pab" "$home\@userid.pab"
endif

:no_copy

; Check last user...

?$space+"Checks existing profile..."

if ($profil_def=@userid)
    ?$space+"The profile is correkt and will not be changed!"
    goto no_profile
endif

; Make a new profile if necessary...

?$space+"Making new profile: @userid"
$prf_ini="c:\exchange\default.prf"

; Copies profile template if it doesnt exist...

if exist("c:\exchange\default.prf")<>1
    copy "@lserver\netlogon\exchange.prf" "$prf_ini"
endif

; Manipulating profile template...

$prf_group="General"
$prf_var="ProfileName"
$res=writeprofilestring($prf_ini,$prf_group,$prf_var,@userid)

$prf_group="Service1"
$prf_var="MailboxName"
$res=writeprofilestring($prf_ini,$prf_group,$prf_var,@userid)

$prf_var="HomeServer"
$res=writeprofilestring($prf_ini,$prf_group,$prf_var,"MAILSRV")

$prf_group="Service2"
$prf_var="PathToPersonalAddressBook"
$res=writeprofilestring($prf_ini,$prf_group,$prf_var,"$home\@userid.pab")

shell "%comspec% /c c:\exchange\newprof.exe -p $prf_ini"

:no_profile

; Searching for local calender file and removes evt. reference...

:loop3
$key=enumkey("$regbase\$profil_def",$Index)
If @error=0
    $check_base="$regbase\$profil_def\$key"
    $check_key="001e03e8"
    $check_val=readvalue($check_base,$check_key)
    if @error=0
        $profil_sch=$check_val
        if $profil_sch<>""
            ?$space+"Removing reference to local calender file: $profil_sch"
            $res=writevalue($check_base,$check_key,"","reg_sz")
            goto loop3_out
        endif
    endif
    $index=$index + 1
    goto loop3
endif

?$space+"Callender settings are OK!"

:loop3_out

; The end...

?$space+"OK!"
?""