Below is a sample script that creates an SMS 1.2 inventory MIF. <P>============================== <P><BR>GoTo "_Main" <P>[Debug] Last Modified=1998/12/14 Last Modifier=Marty List Last Modification=Changed script name from WriteMIF.KiX to SMSCreateMIF.KiX <P>;===============================================================; ; ; ; This script creates custom SMS inventory MIF files. ; ; ; ; ** WARNING: This should only be used by those who understand ; ; SMS and the content of MIF files. It is very easy to put ; ; bad data in the SMS database using MIFs, but it is EXTREMELY ; ; hard to get that data back out again. ; ; ; ; ; ; ;===============================================================; <P>;===============================================================; :_Main If $Debug ? "========= Executing SMSCreateMIF.KiX. . . ==========" ? EndIf ;===============================================================; <P><BR>If $AdminID = "" $AdminID = "MartyL" EndIf If $AdminMachine = "" $AdminMachine = "IT101" EndIf If $CompanyName = "" $CompanyName = "Janus" EndIf $ComputerName = "@Wksta" $CrLf = Chr(13) + Chr(10) $ExitCode = 13 $FileNumber = 0 If $ScriptDir = "" $ScriptDir = @ScriptDir EndIf If $ScriptDir = "" $ScriptDir = "%0\.." EndIf If $Debug "$$ScriptDir: >$ScriptDir<" ? EndIf $SMSIni = "C:\SMS.INI" $NetCardID = ReadProfileString("$SMSIni", "Local", "NetCardID") $SMSBinPath = ReadProfileString("$SMSIni", "SMS", "SMSBinPath") $SMSDataPath = ReadProfileString("$SMSIni", "SMS", "SMSDataPath") $SMSDomain = ReadProfileString("$SMSIni", "Servers", "Domain") $SMSID = ReadProfileString("$SMSIni", "SMS", "SMS Unique ID") $SMSSiteCode = ReadProfileString("$SMSIni", "SMS", "SiteCode") $SMSLocation = "$SMSSiteCode|$SMSDomain|$ComputerName" $SMSLogOnName = ReadProfileString("$SMSIni", "LogonHistory", "LastLoggedUser") $SystemRole = ReadProfileString("$SMSIni", "Local", "SystemRole") $SystemType = ReadProfileString("$SMSIni", "Local", "SystemType") $MachineMIFPath = ReadProfileString("$SMSIni", "SMS", "MachineISVMIFPath") $StandaloneMIFPath = ReadProfileString("$SMSIni", "SMS", "StandaloneISVMIFPath") <P><BR>If @KiX < 3.50 If $Debug ? "@@KiX: >@KiX<" ? EndIf $Message = "WARNING: SMSCreateMIF.KiX failed, KiX version 3.50 is required and @@KiX returned @KiX" GoSub "_Notify" $ExitCode = 1828 GoTo "_Exit" EndIf <P><BR>$X = Val(SubStr("@Time", 7, 2)) $X = $X * 10 <P>SRnd($X) $X = Rnd() $MIFNameTmp = "$ComputerName" + "_$X.TMP" <P>If $MIFName = "" $MIFName = "$ComputerName" + "_$X.MIF" EndIf <P><BR>If $Group = "" Or $Class = "" Or $Name1 = "" $Message = "WARNING: SMSCreateMIF.KiX failed, insufficient variables provided" GoSub "_Notify" GoSub "_Syntax" $ExitCode = 10 GoTo "_Exit" EndIf <P><BR>If $MIFType = "" $MIFType = "NoID" EndIf <P><BR>Select Case $MIFType = "NoID" If $MIFPath = "" $MIFPath = "$MachineMIFPath" EndIf Case $MIFType = "ID" If $MIFPath = "" If $RemoteMIFPath = "" GoSub "_GetRemoteMIFPath" EndIf If Exist("$RemoteMIFPath\") = 0 $Message = "WARNING: SMSCreateMIF.KiX failed, invalid $$RemoteMIFPath ($RemoteMIFPath) obtained" GoSub "_NotifyAdmin" $ExitCode = 53 GoTo "_Exit" EndIf $MIFPath = "$RemoteMIFPath" Endif <P>Case 1 ;Default, or Case Else: $Message = "WARNING: SMSCreateMIF.KiX failed, invalid $$MIFType ($MIFType) provided" GoSub "_Notify" GoSub "_ShowSyntax" $ExitCode = 10 GoTo "_Exit" EndSelect <P><BR>GoSub "_CreateMIF" <P><BR>GoTo "_Complete" ;===============================================================; <P>;===============================================================; :_Complete ;===============================================================; ? "The command completed successfully." ? $ExitCode = 0 <P>GoTo "_Exit" ;===============================================================; <P>;===============================================================; ; Begin subroutines, called from above by "GoSub" ;===============================================================; $Message = "WARNING: SMSCreateMIF.KiX failed, normal script execution flow reached the subroutine section" GoSub "_Notify" $ExitCode = 10 GoTo "_Exit" ;===============================================================; <P>;===============================================================; :_CreateMIF If $Debug ? "========== Begin _CreateMIF ==========" ? EndIf ;===============================================================; If $Debug "$$MIFPath\$$MIFNameTmp: >$MIFPath\$MIFNameTmp<" ? EndIf If $Debug "$$MIFPath\$$MIFName: >$MIFPath\$MIFName<" ? EndIf <P>If Exist("$MIFPath\$MIFNameTmp") Del "$MIFPath\$MIFNameTmp" EndIf If @Error $ExitCode = @Error $Message = "WARNING: SMSCreateMIF.KiX failed, $MIFPath\$MIFNameTmp already exists" GoSub "_Notify" GoTo "_Exit" EndIf <P>$FileNumber = $FileNumber + 1 <P>$ReturnCode = Open($FileNumber, "$MIFPath\$MIFNameTmp", 5) If $ReturnCode = 0 $NUL=WriteLine($FileNumber, 'Start Component' + $CrLf) If $MIFType = "ID" $NUL=WriteLine($FileNumber, 'Name = "Workstation"' + $CrLf) $NUL=WriteLine($FileNumber, 'Start Group' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "Architecture"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 2' + $CrLf) $NUL=WriteLine($FileNumber, ' Class = "MICROSOFT|ARCHITECTURE|1.0"' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "ArchitectureName"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 1' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(18)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "Personal Computer"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, 'End Group' + $CrLf) $NUL=WriteLine($FileNumber, 'Start Group' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "Identification"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 1' + $CrLf) $NUL=WriteLine($FileNumber, ' Class = "MICROSOFT|IDENTIFICATION|1.0"' + $CrLf) $NUL=WriteLine($FileNumber, ' KEY = 1,3,2' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "SMSID"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 1' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(8)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SMSID"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "Name"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 2' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(64)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$ComputerName"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "NetCardID"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 3' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(18)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$NetCardID"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "Domain"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 4' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(16)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SMSDomain"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "Site"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 5' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(3)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SMSSiteCode"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "SMSLocation"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 6' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(64)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SMSLocation"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "SystemRole"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 7' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(12)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SystemRole"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "SystemType"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 8' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(32)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SystemType"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "LogOn Name"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 9' + $CrLf) $NUL=WriteLine($FileNumber, ' Access = READ-ONLY' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = SPECIFIC' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$SMSLogOnName"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) $NUL=WriteLine($FileNumber, 'End Group' + $CrLf) $NUL=WriteLine($FileNumber, 'Start Group' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Group"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 3' + $CrLf) Else $NUL=WriteLine($FileNumber, ' Name = "Machine"' + $CrLf) $NUL=WriteLine($FileNumber, ' Start Group' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Group"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 1' + $CrLf) EndIf $NUL=WriteLine($FileNumber, ' Class = "$Class"' + $CrLf) If $Value1 = "" $Value1 = "" EndIf If $Storage1 = "" $Storage1 = "Specific" EndIf $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Name1"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 1' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = $Storage1' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$Value1"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) If $Name2 If $Value2 = "" $Value2 = "" EndIf If $Storage2 = "" $Storage2 = "Specific" EndIf $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Name2"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 2' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = $Storage2' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$Value2"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) If $Name3 If $Value3 = "" $Value3 = "" EndIf If $Storage3 = "" $Storage3 = "Specific" EndIf $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Name3"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 3' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = $Storage3' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$Value3"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) If $Name4 If $Value4 = "" $Value4 = "" EndIf If $Storage4 = "" $Storage4 = "Specific" EndIf $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Name4"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 4' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = $Storage4' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$Value4"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) If $Name5 If $Value5 = "" $Value5 = "" EndIf If $Storage5 = "" $Storage5 = "Specific" EndIf $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Name5"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 5' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = $Storage5' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$Value5"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) If $Name6 If $Value6 = "" $Value6 = "" EndIf If $Storage6 = "" $Storage6 = "Specific" EndIf $NUL=WriteLine($FileNumber, ' Start Attribute' + $CrLf) $NUL=WriteLine($FileNumber, ' Name = "$Name6"' + $CrLf) $NUL=WriteLine($FileNumber, ' ID = 6' + $CrLf) $NUL=WriteLine($FileNumber, ' Type = String(48)' + $CrLf) $NUL=WriteLine($FileNumber, ' Storage = $Storage6' + $CrLf) $NUL=WriteLine($FileNumber, ' Value = "$Value6"' + $CrLf) $NUL=WriteLine($FileNumber, ' End Attribute' + $CrLf) EndIf EndIf EndIf EndIf EndIf $NUL=WriteLine($FileNumber, ' End Group' + $CrLf) $NUL=WriteLine($FileNumber, 'End Component' + $CrLf) Else $Message = "WARNING: SMSCreateMIF.KiX failed, Open($FileNumber, "$MIFPath\$MIFNameTmp", 5) returned $ReturnCode" GoSub "_Notify" $ExitCode = $ReturnCode GoTo "_Exit" EndIf <P><BR>$NUL=Close($FileNumber) <P><BR>If Exist("$MIFPath\$MIFName") Del "$MIFPath\$MIFName" EndIf If @Error Or Exist("$MIFPath\$MIFName") $ExitCode = @Error $Message = "WARNING: SMSCreateMIF.KiX failed, $MIFPath\$MIFName already exists and could not be deleted" GoSub "_Notify" GoTo "_Exit" EndIf <P>Sleep 1 <P>Shell '%ComSpec% /C Ren "$MIFPath\$MIFNameTmp" "$MIFName"' $ReturnCode = @Error If $ReturnCode Or Exist("$MIFPath\$MIFName") = 0 If $Debug ? "Renaming $MIFNameTmp to $MIFName returned $ReturnCode, sleeping for 5 seconds..." ? EndIf Sleep 5 Shell '%ComSpec% /C Ren "$MIFPath\$MIFNameTmp" "$MIFName"' $ReturnCode = @Error Sleep 3 If $ReturnCode Or Exist("$MIFPath\$MIFName") = 0 $ExitCode = $ReturnCode $Message = "WARNING: SMSCreateMIF.KiX failed, renaming $MIFPath\$MIFNameTmp to $MIFName returned $ReturnCode" GoSub "_Notify" GoTo "_Exit" EndIf EndIf <P><BR>Return ;===============================================================; <P>;===============================================================; :_GetRemoteMIFPath If $Debug ? "========== Begin _GetRemoteMIFPath ==========" ? EndIf ;===============================================================; $RemoteMIFPath = "" <P>If $SMSServer = "" GoSub "_GetSMSServer" EndIf If $SMSShare = "" GoSub "_GetSMSShare" EndIf If $MIFCollectionPoint = "" $MIFCollectionPoint = ReadProfileString("$SMSIni", "SMS", "ISVMIFCollectionPoint") EndIf <P>$RemoteMIFPath = "\\$SMSServer\$SMSShare\$MIFCollectionPoint" If $Debug "$$RemoteMIFPath: >$RemoteMIFPath<" ? EndIf <P>Return ;===============================================================; <P>;===============================================================; :_GetSMSServer If $Debug ? "========== Begin _GetSMSServer ==========" ? EndIf ;===============================================================; $SMSServer = "" $SMSServer = ReadProfileString("$SMSIni", "Servers", "CurrentLogonServer") <P>If $SMSServer = "" $SMSServer = ReadProfileString("$SMSDataPath\Domain.ini", "Servers", "CurrentLogonServer") EndIf <P>Return ;===============================================================; <P>;===============================================================; :_GetSMSShare If $Debug ? "========== Begin _GetSMSShare ==========" ? EndIf ;===============================================================; $SMSShare = "" $SMSShare = ReadProfileString("$SMSIni", "Share", "CurrentLogonServer") <P>If $SMSShare = "" $SMSServer = ReadProfileString("$SMSDataPath\Domain.ini", "Share", "CurrentLogonServer") EndIf <P>Return ;===============================================================; <P>;===============================================================; :_Notify If $Debug ? "========== Begin _Notify ==========" ? EndIf ;===============================================================; If $Message = "" $Message = "WARNING: SMSCreateMIF.KiX failed and then called _Notify with an empty $$Message variable! Oh No!" EndIf <P>If Exist("$ScriptDir\NotifyAdmin.KiX") Call "$ScriptDir\NotifyAdmin.KiX" Else $Message = $Message + " on @Wksta, logged into with @Priv rights by @UserID (@FullName) at @Date @Time @@Error=@Error, @@SError=@SError" Shell '%ComSpec% /C Echo.>>"$ScriptDir\SMSCreateMIF.KiX.log"' Shell '%ComSpec% /C Echo $Message>>"$ScriptDir\SMSCreateMIF.KiX.log"' $ResultCode = SendMessage("$AdminMachine", "$Message") If $ResultCode <> 0 $ResultCode = SendMessage("$AdminID", "$Message") EndIf EndIf <P>$Message = "" <P><BR>Return ;===============================================================; <P>;===============================================================; :_Syntax If $Debug ? "========== Begin _Syntax ==========" ? EndIf ;===============================================================; Beep Beep ? ? $Message = 'Syntax: SMSCreateMIF [$$MIFType=NoID|ID] $$Group= $$Class= $$Name1= $$Value1= $$Name2=...' + $CrLf + $CrLf <P>$Message = $Message + 'Example: KiX32 SMSCreateMIF $$Group="$CompanyName Identification"' + $CrLf + '$$Class="$CompanyName|Identification|1.0" $$Name1="Primary User" $$Value1=@UserID' + $CrLf $Message = $Message + $CrLf + $CrLf $Message = $Message + 'Up to 5 attributes can be written at once ($$Name1 through $$Name5 are valid)' + $CrLf + $CrLf $Message = $Message + '$$MIFType is optional, NoID is the default and causes the MIF to be written to' + $CrLf $Message = $Message + 'the local SMS NoIdMifs folder.' <P>"$Message" ? <P>Return ;===============================================================; <P>;===============================================================; ;===============================================================; :_Exit If $Debug ? "========= Exiting SMSCreateMIF.KiX. . . ==========" ? EndIf ;===============================================================; ;===============================================================; ? <P>Exit $ExitCode

Edited by Sealeopard (2008-05-07 05:27 AM)