IntelligensRendszerFelugyeletFeladat5

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


-- kispe - 2008.05.09.
Itt egy olyan script, ami lekérdezi a telepített szoftvereket egy távoli gépről
A listát XML-el formázva adja vissza
Csinálsz 2 db vmware-s XP-t, és elindítod mindkettőt úgy, hogy tudják egymást pingelni (nekem NAT-tal sikerült, de valakinek meg Bridge módban)

valamint a TÁVOLI gépen megcsinálod ezeket a beállításokat 
valamint ezeket is, különös tekintettel a DCOM és a WMI részre, akkor ha futtatod a programot, megkapod a listát.


Parancssorból lehet futtatni.
következzenek a kódok:
lekérdező script (lista.vbs legyen a neve)
Note: A lekérdezés visszaadja a programokhoz tartozó UninstallStringet is (ez jól jöhet, ha pl le kell törölni)
Note2: A lekérdezés visszaadja a programok mappáját is
Note3: a scriptben át kell irni a keresési kulcsszót a saját karbantartási feladatodnak megfelelően (ami itt solitaire az nálad pl counter strike vagy pinball :D
Note4: A script tényleg letörli a mappát ha megtalálja, erősen ajánlott vmware-ben futtatni (és főleg ne teszteld host OS-en pl c:\ bemenettel, lehet h furcsán fog kinézni utána a gép


Dim strKey, strSubKey, oReg, arrSubKeys(), strDisplayKey, strDisplayVersion, strInstallLocation, strDisplayName, strUninstallString, strFolder, i
Dim arrSoftware(399)		' Allow for 400 program entries in add/remove programs
Dim pos, minone 'for string manipulation
Dim arrToDel(399), j 'list of folders to delete
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer=WScript.Arguments.Item(0)	  ' Change to name of computer if not local
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Set oReg=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
oReg.EnumKey HKEY_LOCAL_MACHINE, strKey, arrSubKeys
i=0
j=0
minone=-1
' Read the data from the registry and load it into an array
For Each strSubKey In arrSubKeys
oReg.GetStringValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey, "DisplayName", strDisplayName
oReg.GetStringValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey, "UninstallString", strUninstallString
If not IsNull(strDisplayName) And Left(strDisplayName,1)<>"" Then
		arrSoftware(i)="<name>" & replace(strDisplayName,","," ") & "</name>"	  ' Remove commas and replace with spaces
		If not IsNull(strUninstallString) And Left(strUninstallString,1)<>"" Then
		 strFolder = Left(strUninstallString,InStrRev(strUninstallString, "\"))
		 pos=Len(strFolder)		 
		 pos=pos-1
		 If pos>0 Then
		strFolder = Left(strFolder, pos)
		 End If
		 
		 arrSoftware(i)=arrSoftware(i) & "<Folder>" & strFolder & "</Folder>"
		If (InStr(Lcase(strFolder),"solitaire"))<>0 Then 'the name contains the required string -> solitaire
			 arrToDel(j)=strFolder 'store the folder
			 j=j+1
		End If
				arrSoftware(i)=arrSoftware(i) & "<Uninstall>" & replace(strUninstallString,","," ") & "</Uninstall>"
		End If
		i=i+1
End If
strUninstallString = vbEmpty
strDisplayName = vbEmpty
strDisplayVersion = vbEmpty
strInstallLocation = vbEmpty
Next
' bubble sort the data
For i = UBound(arrSoftware) - 1 To 0 Step -1
	 for j= 0 to i
		  if arrSoftware(j)>arrSoftware(j+1) Then
				temp=arrSoftware(j+1)
				arrSoftware(j+1)=arrSoftware(j)
				arrSoftware(j)=temp
		  end If
	 Next
Next
' write the data and ignore empty array elements
wscript.Echo "<?xml version=" & Unescape("%22") & "1.0" & Unescape("%22") & " encoding=" & Unescape("%22") & "UTF-8" & Unescape("%22") & "?>"
wscript.Echo("<root>")
For i = 0 To UBound(arrSoftware) Step 1
		If arrSoftware(i)<>"" Then
		wscript.Echo("<element>")
		wscript.Echo(arrSoftware(i))
		wscript.Echo("</element>")
		End If
Next
'list the elements to delete
For j = 0 To UBound(arrToDel) Step 1
		If arrToDel(j)<>"" Then
		wscript.Echo("<toDelElement>")
		wscript.Echo(arrToDel(j))
		wscript.Echo("</toDelElement>")
		End If
Next
wscript.Echo("</root>")
'delete the necessary files
For j = 0 To UBound(arrToDel) Step 1
		If arrToDel(j)<>"" Then
		
		runotherscript "uninstall.vbs " & " " & Unescape("%22") & strComputer & Unescape("%22") & " " & Unescape("%22") & arrToDel(j) & Unescape("%22")
		
		End If
Next

Sub runotherscript(name)
  Dim oShell
  Set oShell = WScript.CreateObject("WSCript.shell")
  oShell.run name, 1, true
  Set oShell = Nothing
end sub


Lekérdezést futtató script (lista.bat legyen a neve, 2 paramétert kap: első a távoli IP cím, második a kimenet neve)


SET IP=%1%
SET OUT=%2%
cscript lista.vbs %IP% > %OUT%
cscript cleanup.vbs %OUT%
cscript cleanup.vbs %OUT%
PAUSE


Maga a lekérdezés (indíts egy parancssort és írd bele)

lista 192.168.49.132 c:\eredmeny.xml



Kimeneti fájlt formázó script (cleanup.vbs)


strInputFile = WScript.Arguments.Item(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Const intForReading = 1
Set objInputFile = objFSO.OpenTextFile(strInputFile, intForReading, False)
If Not objInputFile.AtEndOfStream Then
		objInputFile.SkipLine
Else		
		WScript.Quit
End If
strContents = ""
While Not objInputFile.AtEndOfStream
		If strContents = "" Then
				strContents = objInputFile.ReadLine
		Else
				strContents = strContents & VbCrLf & objInputFile.ReadLine
		End If
Wend
objInputFile.Close
Set objInputFile = Nothing

Set objOutputFile = objFSO.CreateTextFile(strInputFile, True)
objOutputFile.Write strContents
objOutputFile.Close
Set objOutputFile = Nothing
Set objFSO = Nothing



Nemkívánatos mappát törlő script (uninstall.vbs)


Dim arrFolders()
intSize = 0

strComputer = WScript.Arguments.Item(0) 'computer location
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

strFolderName = WScript.Arguments.Item(1) 'folder to delete

Set colSubfolders = objWMIService.ExecQuery _
	 ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
		  & "Where AssocClass = Win32_Subdirectory " _
				& "ResultRole = PartComponent")

ReDim Preserve arrFolders(intSize)
arrFolders(intSize) = strFolderName
intSize = intSize + 1

For Each objFolder in colSubfolders
	 GetSubFolders strFolderName
Next

Sub GetSubFolders(strFolderName)
	 Set colSubfolders2 = objWMIService.ExecQuery _
		  ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
				& "Where AssocClass = Win32_Subdirectory " _
					 & "ResultRole = PartComponent")

	 For Each objFolder2 in colSubfolders2
		  strFolderName = objFolder2.Name
		  ReDim Preserve arrFolders(intSize)
		  arrFolders(intSize) = strFolderName
		  intSize = intSize + 1
		  GetSubFolders strFolderName
	 Next
End Sub

For i = Ubound(arrFolders) to 0 Step -1
	 strFolder = arrFolders(i)
	 strFolder = Replace(strFolder, "\", "\\")
	 Set colFolders = objWMIService.ExecQuery _
		  ("Select * from Win32_Directory where Name = '" & strFolder & "'")

	 For Each objFolder in colFolders
		  errResults = objFolder.Delete
	 Next
Next


A lekérdezéshez tartozó xsd (mostanában ez a fejlett és a menő xml struktúra definíció)

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="root">
	 <xs:complexType>
		<xs:sequence>
				<xs:element name="element">
					<xs:complexType>
						<xs:sequence>
							<xs:all>
								<xs:element name="name" type="xs:string"/>
								<xs:element name="Folder" type="xs:string"/>
								<xs:element name="Uninstall" type="xs:string"/>
							</xs:all>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="toDelElement" type="xs:string"/>
	
		</xs:sequence>
	 </xs:complexType>
</xs:element>

</xs:schema>