| 
| 
| 
| #211011 - 2015-12-22 07:19 PM  error in parameterdefinition |  
| BradV   Seasoned Scripter
 
      
 Registered:  2006-08-16
 Posts: 687
 Loc:  Maryland, USA
 | 
OK, I'm sure it is staring me right in the face, but I can't see it.   
 I couldn't find any UDFs to check installed .net versions.  So, I was referencing   Determine Which .NET Framework Versions Are Installed.  I created:
 Function CheckDotNet(options $strComputer)
   ; Function:   CheckDotNet
   ;
   ; Author:     Brad Van Orden
   ;             Based on Microsoft Developer Network article:
   ;             How to: Determine Which .NET Framework Versions Are Installed
   ;
   ; Syntax:     CheckDotNet(\[{$strComputer])
   ;
   ; Parameters:  Optional name of remote system to query.
   ;              If omitted, will query the current system.
   ;
   ; Returns:    Two dimensional array.  The first dimension will be the major
   ;             version number.  The second the complete version.
   ;
   ; Dependencies: None
   ;
   DIM $strComputer, $strKey, $intIndex, $strKeyName, $strVers, $arrVer[0,1]
   ;
   If $strComputer = ""
      $strComputer = "."
   EndIf
   ;
   $strKey = "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"
   $intIndex = 0
   If KeyExist($strKey)
      $strKeyName = EnumKey($strKey, $intIndex)
      While Not @ERROR
         If $strKeyName <> "CDF"
            ; Want to ignore the CDF key
            REDIM PRESERVE $arrVer[$intIndex, $intIndex + 1]
            If Left($strKeyName, 2) = "v1"
               ; The version 1 setup is different.  Need to treat it separately.
               $arrVer[$indIndex, 0] = Left($strKeyName, 2)
               $arrVer[$intIndex, 1] = Substr($strKeyName, 2)
               $intIndex = $intIndex + 1
            Else
               If $strKeyName <> "v4.0"
                  ; Ignore that subkey
                  If $strKeyName = "v4"
                     $strVers = ReadValue("\\" + $strComputer + $strKey + "\Full", "Version")
                     $arrVer[$intIndex, 0] = $strKeyName
                     $arrVer[$intIndex, 1] = $strVers
                     $intIndex = $intIndex + 1
                  Else
                     $strVers = ReadValue("\\" + $strComputer + $strKey, "Version")
                     $arrVer[$intIndex, 0] = $strKeyName
                     $arrVer[$intIndex, 1] = $strVers
                     $intIndex = $intIndex + 1
                  EndIf
               EndIf
            EndIf
         EndIf
      Loop
   EndIf
   $CheckDotNet = $arrVer
EndFunction
 I then attempted to call it with:
 
 but keep getting :Break On
DIM $SO
$SO = SetOption('Explicit',          'On')
$SO = SetOption('NoMacrosInStrings', 'On')
DIM $arrDotNet[0,1], $strFile, $intI, $intErr
$strFile = "c:\temp\dotnet.ini"
$arrDotNet = CheckDotNet()
For $intI = 1 to Ubound$($arrDotNet)
   $intErr = WriteProfileString($strFile,"localhost",$arrDotNet[$intI,0],$arrDotNet[$intI,1])
NextNote: I might have some typos.  I can't directly upload the script.  Anyone point out my mistake?  Thanks!ERROR: error in parameterdefinition of [checkdotnet]!
Script:U:\check_dotnet.kix |  
| Top |  |  |  |  
| 
| 
| #211013 - 2015-12-23 11:47 AM  Re: error in parameterdefinition
[Re:  Jochen] |  
| BradV   Seasoned Scripter
 
      
 Registered:  2006-08-16
 Posts: 687
 Loc:  Maryland, USA
 | 
That was it!  Thanks!    |  
| Top |  |  |  |  
| 
| 
| #211014 - 2015-12-23 12:54 PM  Re: error in parameterdefinition
[Re:  BradV] |  
| BradV   Seasoned Scripter
 
      
 Registered:  2006-08-16
 Posts: 687
 Loc:  Maryland, USA
 | 
I had a few errors in the code.  Also, forgot REDIM PRESERVE doesn't work on multi-dimensional arrays.  I just made it an arbitrarily large array.  Here are the corrections: Function CheckDotNet(optional $strComputer)
   ; Function:   CheckDotNet
   ;
   ; Author:     Brad Van Orden
   ;             Based on Microsoft Developer Network article:
   ;             How to: Determine Which .NET Framework Versions Are Installed
   ;
   ; Syntax:     CheckDotNet(\[{$strComputer])
   ;
   ; Parameters:  Optional name of remote system to query.
   ;              If omitted, will query the current system.
   ;
   ; Returns:    Two dimensional array.  The first dimension will be the major
   ;             version number.  The second the complete version.
   ;
   ; Dependencies: None
   ;
   DIM $strKey, $intIndex, $strKeyName, $strVers, $arrVer[10,11]
   ;
   If $strComputer = ""
      $strComputer = "."
   EndIf
   ;
   $strKey = "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"
   $intIndex = 0
   $intI     = 0
   If KeyExist("\\" + $strComputer + $strKey)
      $strKeyName = EnumKey("\\" + $strComputer + $strKey, $intIndex)
      While Not @ERROR
         If $strKeyName <> "CDF"
            ; Want to ignore the CDF key
            If Left($strKeyName, 2) = "v1"
               ; The version 1 setup is different.  Need to treat it separately.
               $arrVer[$intI, 0] = Left($strKeyName, 2)
               $arrVer[$intI, 1] = Substr($strKeyName, 2)
               $intI = $intI + 1
            Else
               If $strKeyName <> "v4.0"
                  ; Ignore that subkey
                  If $strKeyName = "v4"
                     $strVers = ReadValue("\\" + $strComputer + $strKey + "\" + $strKeyName + "\Full", "Version")
                     $arrVer[$intI, 0] = $strKeyName
                     $arrVer[$intI, 1] = $strVers
                     $intI = $intI + 1
                  Else
                     $strVers = ReadValue("\\" + $strComputer + $strKey + "\" + $strKeyName, "Version")
                     If Left($strKeyName, 2) = "v2"
                        $arrVer[$intI, 0] = Left($strKeyName, 2)
                     Else
                        $arrVer[$intI, 0] = $strKeyName
                     EndIf
                     $arrVer[$intI, 1] = $strVers
                     $intI = $intI + 1
                  EndIf
               EndIf
            EndIf
         EndIf
         $intIndex = $intIndex + 1
         $strKeyName = EnumKey("\\" + $strComputer + $strKey, $intIndex)
      Loop
   EndIf
   ; To mark the end of the array, place a -1 in the next array position.
   $arrVer[$intI, 0] = -1
   $CheckDotNet = $arrVer
EndFunction
 I have an ini file with all of the computers in the active directory and use that when probing all of the systems.  It just looks like:
 I then called with:[computers]
comp1=name1
comp2=name2which gave me the dotnet versions on each host.Break On
DIM $SO
$SO = SetOption('Explicit',          'On')
$SO = SetOption('NoMacrosInStrings', 'On')
DIM $arrDotNet[10,11], $strFile, $intI, $intErr
DIM $strWks, $strComps, $colComps, $objComp
include "functions.kix"
;
$strFile  = "c:\temp\dotnet.ini"
$strComps = "c:\temp\computers.ini"
;
$colComps = Split(ReadProfileString($strComps, "computers", ""),chr(10))
For Each $objComp in $colComps
   If $objComp <> ""
      $strWks = ReadProfileString($strComps, "computers", $objComp)
      ? "Checking for installed .net versions on: " + $strWks
      $arrDotNet = CheckDotNet($strWks)
      $intI = 0
      While $arrDotNet[$intI, 0] <> -1
         $intErr = WriteProfileString($strFile,$strWks,$arrDotNet[$intI,0],$arrDotNet[$intI,1])
         $intI = $intI + 1
      Loop
   Else
      ? "Did not receive results from: " + $strWks
      $intErr = WriteProfileString($strFile,$strWks,"DOTNET","Could not read from this system.")
   EndIf
Next  
 Edited by BradV (2016-01-05 11:48 AM)
 Edit Reason: fixed optional
 |  
| Top |  |  |  |  
| 
| 
| #211026 - 2016-01-06 12:21 PM  Re: error in parameterdefinition
[Re:  Glenn Barnas] |  
| BradV   Seasoned Scripter
 
      
 Registered:  2006-08-16
 Posts: 687
 Loc:  Maryland, USA
 | 
Doc you are correct that I have some error in my logic.  I need to look at it again.  Glenn, great suggestion about the ini.  I'll try to implement that as well.    |  
| Top |  |  |  |  
 Moderator:  Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
 
 | 
| 
 
| 0 registered
and 739 anonymous users online. 
 | 
 |  |