Egyoldalú szerelem

Szeretem a WMI-t. Tényleg. Csak aza bajom, hogy amikor használni szeretném mindig úgy érzem, hogy örök ígéret marad. Az első – ténylegesen számon tartható élményem még a WMIC-vel volt. Szerettem volna parancssorból egy másik gépen elindítani egy számológépet (calc.exe). El is indult, de a képernyőn nem jelent meg. A „hiba” okára sehogy sem jöttem rá, aztán később a WMI tanfolyamon (Marci tartotta) kiderült, hogy biztonsági okokból a távolról elindított processzek nem lehetnek interakívak. A PSExec persze tud interaktív lenni, vagyis ennek a security hókuszpóknak sok értelme nincs.

Aztán már ezen a tanfolyamon szerettünk volna egy tényleg értelmes módot találni a WMI használatára: Ha a felhasználó home-könyvtárában elfogy a hely, de legalábbis fogyóban van, akkor a WMI script kapja el az eseményt az eseménynaplóból, olvassa ki a felhasználó nevét, nézze meg a kvótáját és írjon neki egy levelet, hogy még mennyi helye van, és hogy legyen szíves törölni (hasonlóan ahhoz, ahogy az Exchange a postafiókok esetén figyelmeztet). Értelmes? Logikus? Igen, de nem lehet megcsinálni. Nem lehet kiolvasni, hogy az adott felhasználónak mely meghajtón milyen foglaltsági adatai vannak. Nem én nem tudtam megoldani, hanem a Marci, és még azt is meg tudta mondani, hogy ez miért nem megy (most már nem tudom fejből, de valami association probléma volt) Szóval szép ez a szerelem, csak a menyasszony fogatlan.

Most újból nekiszaladtam a falnak. Terminal Server automatikus telepítés. Én a CD alapú RIS Image-et favorizálom, mert az a legátláthatóbb és legrugalmasabb. A ristndrd.sif fájlban ugyan meg lehet adni, hogy telepítse az NLBS-t, kösse hozzá egy adapterhez, illetve paraméterezze fel, ám ezt minden gépnél ugyanazokkal a paraméterekkel tenné meg, vagyis már a második gép esetén nem működne a mutatvány. Ráadásul már az IP címmel is baj lenne, mert statikus címet megintcsak nem jó bevarrni, a dinamikusat meg nem szereti az NLBS. Sebaj, írjunk egy scriptet, amelyet futtassunk a cmdlines.txt-ből. A ristndrd-sif-ben NEM adjuk meg, hogy NLBS-t is telepíteni szeretnénk, hanem majd megoldjuk WMI-ból. No, itt jött szembe a fal, mert a NLBS-t nem lehet csak úgy remote telepíteni. Miért nem? Csak. OK. Ez esetben marad a statikus IP bevarrás, egy NLBS telepítés és binding a ristndrd.sif-ből fals adatokkal, majd egy script, ami a következőt csinálná:

1.      Megnézi a gép nevét

2.      Ez alapján beállít egy statikus IP címet és konfigurálja az egyéb paramétereket

3.      WMI-al beállítja a szerver megfelelő NLBS beállításait

4.      Újratölti a NLBS-t, hogy érvényre jussanak a beállítások

Első a statikus IP-címre átállása. Hát erre nem érdemes WMI-al nekifutni, bőven jó a netsh, annál egyszerűbb úgysem lehet semmi. A Netsh-t vbscriptből lehet meghívni, miután már tudjuk a szerver nevét

Set objComputer = CreateObject("Shell.LocalMachine")

CompName = objComputer.MachineName

Select Case CompName

     Case "MALSERVERA"

     Case "MALSERVERB"

     Case "MALSERVERC"

             IPConfigFile = "c:tempnetsh-malserverC.txt"

End Select

Set WshShell = CreateObject("WScript.Shell")

            Set oExec = WshShell.Exec("netsh -c ""Interface IP"" -f " & IPConfigFile)

            Do While oExec.Status = 0

                 WScript.Sleep 100

           Loop 

  

A netsh-malserverC.txt pedig a következőt tartalmazza: 

set address name="Local Area Connection" source=static 10.0.x.C 255.255.0.0 10.x.x.x 1

add dns "Local Area Connection" 10.0.y.y 1

add dns "Local Area Connection" 10.0.z.z 2

add wins "Local Area Connection" 10.0.w.w 1

add wins "Local Area Connection" 10.k.w.w 2

 Ezzel meg is volnánk, jöhet az NLBS. Már fent van ugye, vannak is paraméterei, tehát azokat kell beolvasni, módosítani, majd visszaírni

 Íme a script: 

On Error Resume Next

Const wbemFlagReturnImmediately = &h10

Const wbemFlagForwardOnly = &h20

Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootMicrosoftNLB")

Set colItems = objWMIService.ExecQuery("SELECT * FROM MicrosoftNLB_ClusterSetting", "WQL", _

                                        wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In colItems

   If objItem.ClusterName = "noname.mal.priv" then

                        objItem.ClusterIPAddress = "10.q.q.q"

                        ObjItem.LoadAllSettings

            Exit For

   End If

Next

 A példában csak egy paramétert módosítok, de ez most nem lényeges. Nagyon szép. csak nem működik.  Miért? Nem tudom. Rákerestem néhány kulcsszóra a neten. Megoldást persze nem találtam, de legalább kiderült egy két turpisság.

Itt van mindját egy hír, hogy a Windows Server 2003 SP1-el megoldották azt, hogy Unicast esetén is kommunikálhassanak egymással a fürt node-jai egykártyás szituációban is. No, ezt jó tudni. Üröm az örömben, hogy persze a WMI nem ment a változások után, tehát egyrészt nem dokumentáltak egy metódust, másrészt a kommunikációt az SP1-en túl egy registry kulcs beállításával lehet elérni, de ez a LoadAllSettings metódus, amelyet én is használtam (volna) nem írja ki. A nem dkumentált metódus valószínűleg az SP1-el jött be és AccessNLBRegParam a neve. Még jó, hogy a fent hivatkozott cikk tartalmaz egy „wlbs.exe reload” parancsot, amely jó ötlet, ha lesz még időm egyáltalán erra, akkor kipróbálom.

 

Biztosan folyt. köv.

One Response to Egyoldalú szerelem

  1. Petrenyi Jozsef says:

    Látom, szereted az extrém sportokat.:)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: