Here's the dillema. We will be migrating a lot of users from physical desktops to virtual desktops. So naturally, we need to move any pst files from the local file system to the storage system which is the easy part.
Where I am currently struggling is figuring out how to modify the 001f6700 REG_BINARY value to reflect the new location of the pst file(s).
So, the function I am trying to use is shown below. When I run the script the SetBinaryValue method runs and generates no errors but the value still shows the local path and appears to be untouched by the script. Based off of some posts I have been reading I may not be formating the data within arrBinaryValueName properly before using the SetBinaryValue method.
Any help would be greatly appreciated. Apologies if an answer to this has already been posted but I have been searching all over the inet and only found a few treads talking about this specific issue.
Bryan
Code:
Function WriteNewLocation(strWriteKey)
Dim newAsciiName, arrBinaryValueName
strSplitter = Split(strWriteKey, ";", -1, 1)
PSTFileNameOld = LCase(strSplitter(0))
p_PSTRGuidReg = strSplitter(1)
objPSTLog.WriteLine(p_PSTRGuidReg)
strArray = Split(PSTFileNameOld, "\")
For Each arr In strArray
If InStr(arr, ".pst") Then
strFileName = arr
End If
Next
BinaryValueName = strServer & strFileName
MsgBox BinaryValueName
If InStr(PSTFileNameOld,strFile) <> 0 Then
BinaryValueName = Replace(PSTFileNameOld,PSTFileNameOld,BinaryValueName)
End If
objPSTLog.WriteLine "Now fixing " & BinaryValueName
max = len(BinaryValueName)
For intLoop = 1 to Max step 1 'convert to ascii
asciiName = asc(mid(BinaryValueName, intLoop, 1))
If newAsciiName = "" and newAsciiInitials = "" Then
newAsciiName = asciiName
Else
newAsciiName = newAsciiName & "," & "00" & "," & asciiName
End If
If intLoop <= 2 then
newAsciiInitials = newAsciiName & "," & "00"
End If
Next
newAsciiName = newAsciiName & "," & "00," & "00," & "00"
newAsciiName = Replace(newAsciiName, "\", "") 'remove "\"
newAsciiName = Replace(newAsciiName, vbCr, "") 'remove Cr and Lf separately, in case return is not vbCrLf
newAsciiName = Replace(newAsciiName, vbLf, "")
newAsciiName = "&H"&Replace(newAsciiName, ",", ",&H")
If Right(newAsciiName, 1) = "," Then
newAsciiName = Left(newAsciiName, (len(newAsciiName) - 1)) 'Remove any trailing comma
End If
MsgBox newAsciiName
arrBinaryValueName = Split(newAsciiName,",") 'convert to an array
strMoniker = "winMgmts:\\.\root\default:StdRegProv"
Set oReg1 = GetObject(strMoniker)
strPSTEnd = oReg1.SetBinaryValue(HKEY_CURRENT_USER, strSplitter(1), r_PSTFile, arrBinaryValueName) 'Change the binary value
If (Return = 0) And (Err.Number = 0) Then
WScript.Echo "Binary value changed successfully!"
Else
WScript.Echo Err.Number & " " & Err.Description
End If
On Error Resume Next
objPSTLog.WriteLine "Deleting value: HKEY_CURRENT_USER\" & strSplitter(1) & "\01020fff"
oReg1.DeleteValue HKEY_CURRENT_USER, strSplitter(1), r_PSTFile2
End Function