Upalny dzień w Belgii. Taki oksymoron chciałoby się rzec. Zawsze ten kraj kojarzył mi się z krainą deszczowców. Zaskoczyłem się wiec jego całkiem przyzwoitą aurą. Szkoda jedynie, że mogę ją podziwiać przez podgląd z kamer CCTV w jednej z tamtejszych serwerowni. Zawsze taka sytuacja przypomina mi stare żydowskie przekleństwo – Żebyś po wodzie chodził i pić prosił.

Dość jednak tego marudzenia, zważywszy, że wieczory przepełnione są hektolitrami belgijskiego piwa to niema, tak naprawdę, na co narzekać. Można nawet powiedzieć, że dzielę traumę polskiej emigracji za chlebem – tragizm sytuacji bycia gdzieś a zarazem oglądania tego przez szybkę… Koniec jednak tych rzewnych psalmów… tak naprawdę chodziło mi o to, że kolejna migracja ciągnęła się godzinami, a ja zanurzyłem się w marzeniach o słońcu, które tak radośnie ogrzewało grządki klika metrów nade mną.

Zetknąłem się z problemem migracji Microsoftowego mechanizmu Offline Files. Byłem bardzo zdziwiony, że ktoś tego używa i mu to działa! Gdziekolwiek, bowiem się z nim nie stykałem administratorzy byli uradowani, że przy okazji migracji mogą z niego zrezygnować. Ten przypadek był nieco inny – wszystko działało wyśmienicie. Sync Center pokazywał wszystko prawidło, użytkownicy prawym przyciskiem mogli synchronizować i odtwarzać swoje pliki… aż miło było popatrzeć.

Byłem najeźdźcą w tej krainie wiecznej szczęśliwości. Najeźdźcą, który nie miał spalić jej do cna i wygarbować skóry biednych użytkowników a pozostawić ja vm’ką budowaną… dodatkowo dbając by wszystkie dotychczas wyśmienicie działające mechanizmy po jej przebudowaniu chodziły z równą szwajcarską precyzją.

Przenoszenie mechanizmu Offline Files z jednego serwera docelowego na drugi wiąże się z wyjaśnieniem dla każdego komputera klienckiego, że synchronizacja ma się odbywać na nową lokalizację. Najłatwiej to rozwiązać skryptem położonym w NETLOGON. Można oczywiście wybrać drogę Shivy i robić wszystko ręcznie, ale do mnie to jakoś nie przemawiało przy prawie 600 pecetach. Postanowiłem wiec poszukać jakiegoś gotowego rozwiązania, które oszczędziłoby mi ponownego wynajdowania kola. Opłacało się – istnieje gotowy skrypt do zmiany serwera w wewnętrznych metadanych mechanizmu Offline Files.

Celem wykonania niezbędnych zmian w naszym skrypcie logowanie znajdującym się w folderze NETLOGON dopisujemy linijkę:

objapp.run „\\dc01.corp.cmantarnapolka.pl\netlogon\OU_BANGLADESZ\cscrenameitem.vbs /OldItemPath:\\stary.corp.cmantarnapolka.pl /NewItemPath:\\nowy.corp.cmantarnapolka.pl „,0,false

Linijka ta odnosi się do pliku skryptu cscrenameitem.vbs, który umieściliśmy w lokalizacji \\dc01.corp.cmantarnapolka.pl\netlogon\OU_BANGLADESZ\. Należy oczywiście to dostosować do swoich potrzeb. Skrypt natomiast można pobrać z http://blogs.technet.com/b/filecab/archive/2007/03/29/cscrenameitem-vbs.aspx. Lub przekleić:


‚ THIS CODE AND INFORMATION IS PROVIDED „AS IS” WITHOUT WARRANTY OF
‚ ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
‚ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
‚ PARTICULAR PURPOSE.

‚ Copyright (c) Microsoft Corporation. All rights reserved.


‚ Usage: CscRenameItem.vbs /OldItemPath:<path> /NewItemPath:<path> [/Machine:value] [/User:value] [/Password:value]


‚ Demonstrates how to rename an item in the Ofline Files cache.

‚ OldItemPath – UNC path of the current path to be renamed.

‚ NewItemPath – UNC path of the new path to replace the old path.

‚ If NewItemPath already exists, the operation is not performed.
‚ This operation simply schedules a rename to be performed on the next restart
‚ restart of the system.

const cComputerName = „LocalHost”
const cWMINamespace = „root\cimv2”
const cWMIClass = „Win32_OfflineFilesCache”

‚ Process commandline arguments

strOldItemPath = WScript.Arguments.Named(„OldItemPath”)’
if Len(strOldItemPath) = 0 Then
Wscript.Echo „OldItemPath parameter required”
Err.Raise 449 ‚ „argument not optional” error
End if
strNewItemPath = WScript.Arguments.Named(„NewItemPath”)’
if Len(strNewItemPath) = 0 Then
Wscript.Echo „NewItemPath parameter required”
Err.Raise 449 ‚ „argument not optional” error
End if
strComputerName = WScript.Arguments.Named(„Machine”)
If Len(strComputerName) = 0 Then strComputerName = cComputerName
strUserID = WScript.Arguments.Named(„User”)
If Len(strUserID) = 0 Then strUserID = „”
strPassword = WScript.Arguments.Named(„Password”)
If Len(strPassword) = 0 Then strPassword = „”
set objWMILocator = WScript.CreateObject(„WbemScripting.SWbemLocator”)
Set objWMIServices = objWMILocator.ConnectServer(strComputerName, _
cWMINameSpace, _
strUserID, _
strPassword)

‚ Note that Win32_OfflineFilesCache is a singleton.

‚ Also note that while we pass „False” for the bReplace parameter, that
‚ parameter is ignored. Existing destinations are never replaced, regardless
‚ of what we pass for the 3rd parameter.

Set objCache = objWMIServices.Get(„Win32_OfflineFilesCache=@”)
objCache.RenameItem strOldItemPath, strNewItemPath, False
WScript.Echo „item rename scheduled. A restart of the system is necessary to apply the change.”

Po zapisaniu należy się wylogować i zalogować ponownie, oraz co NAJWAŻNIEJSZE zrestartować komputer. Musimy to zrobić, inaczej zmiana będzie dokonana, ale nie wejdzie w życie. Jakie to niesie konsekwencje dla użytkowników? Dosyć nieprzyjemne. Jeżeli wykonamy skrypt (poprzez logowanie, lub bezpośrednio), ale nie wykonamy restartu możemy doprowadzić do uszkodzenia bazy danych Sync Center. Doprowadzić do tego można bardzo łatwo. Opiszę to w kliku, bardzo prawdopodobnych krokach – po uruchomieniu skryptu udajemy się do naszego katalogu, który powinien być oznaczony, jako offline, zauważamy, że nie jest, wiec bezmyślnie klikamy na niego i robimy go offline. Gotowe. W taki oto sposób uszkadzamy bazę Sync Center i nadaje się ona do całkowitego wykasowania. Wiec zaznaczam jeszcze raz – restart. Po restarcie wszystko działa bez zarzutu.

Ps. Powyższy skrypt przetestowałem na XP, Viscie i Windows 7. Work like charm!

About the author

Bloger i niezależny konsultant z wieloletnim doświadczeniem w branży IT. Specjalizujący się w wirtualizacji i cloud computingu. Posiada tytuły MCP, MCTS, VCP oraz VMware vExpert.

Leave a Reply