Skip to main content
Solved

Help needed with Asset Explorer script


Forum|alt.badge.img+8

For several years we've been using script to scan Macs and submit hardware and software info into our ServiceDesk Inventory. It works fine on MacOS 10.10 to 10.14, but fails in 10.15. Here is a log:

Running script Service Desk Express Inventory...
    Script exit code: 1
    Script result: ##### Scanning Started #####
/Library/Application Support/JAMF/tmp/Service Desk Express Inventory: line 21: SPE-R23-MT.xml: Read-only file system
/Library/Application Support/JAMF/tmp/Service Desk Express Inventory: line 62: SPE-R23-MT.xml: Read-only file system
/Library/Application Support/JAMF/tmp/Service Desk Express Inventory: line 63: SPE-R23-MT.xml: Read-only file system

    Error running script: return code was 1.

I think it's due to system volume being read-only in Catalina. Please help to modify the script to change the location of OUTPUTFILE.
I contacted ServiceDesk support, but they have no clue.
Here is the entire script:

#!/bin/sh

############ Server details ############

hostName="xpress.sd44.ca"
portNo="443"
protocol="https"

############ Server details ############

SUPPORT="assetexplorer-support@manageengine.com"
PRODUCT="AssetExplorer"

COMPUTERNAME=`hostname`
OUTPUTFILE="$COMPUTERNAME.xml"


main()
{
    echo "##### Scanning Started #####"
        echo "<?xml version="1.0" encoding="UTF-8" ?><DocRoot>" >$OUTPUTFILE
    constructXML "ComputerName" "hostname"
    constructXML "OS_Category" "uname -s"
    echo "<Hardware_Info>" >>$OUTPUTFILE
    constructXML "OS_Category" "sw_vers"
    constructXML "Memory_Information" "sysctl hw.physmem"
    constructXML "Memory_Information" "sysctl hw.usermem"
    constructXML "Memory_Informationw" "sysctl hw.memsize"
    constructXML "Memory_Information" "sysctl vm.swapusage"
    constructXML "Computer_Information" "hostname"
    constructXML "Computer_Information" "hostname -s"
    constructXML "CPU_Information" "system_profiler SPHardwareDataType"
    constructXML "Disk_Space" "df -k"
    constructXML "NIC_Info" "/sbin/ifconfig"
    #-----------Last logged in user name -----------
    constructXML "Last_logged_user" "last | awk '{print $1 " " $3}'"
    #-------------Chipset, VRAM, Monitor display type, resolution---------------------
    constructXML "Monitoranddisplayinfo" "/usr/sbin/system_profiler SPDisplaysDataType"
    #--------------Sound card -----------------------------
    constructXML "SoundCardinfo" "/usr/sbin/system_profiler SPAudioDataType"         
    #---------------Memory modules----------------------
    constructXML "MemoryInfo" "/usr/sbin/system_profiler SPMemoryDataType"           
    #--------------Physical drives-------------------------
    constructXML "PhysicaldrivesInfo" "/usr/sbin/system_profiler SPParallelATADataType"     
    #--------------Harddisk info if no data is available in SPParallelATADataType------------
    constructXML "HarddrivesInfo" "/usr/sbin/system_profiler SPSerialATADataType"           
    #----------------Printer Info-----------------------
    constructXML "Printer_Info" "/usr/sbin/system_profiler SPPrintersDataType -xml"           
    echo "</Hardware_Info>" >>$OUTPUTFILE
    echo "<Software_Info>" >>$OUTPUTFILE
    constructXML "Installed_Softwares" "system_profiler SPApplicationsDataType"
    echo "</Software_Info>" >>$OUTPUTFILE
    echo "</DocRoot>" >>$OUTPUTFILE
    echo "##### Scanning completed #####"
    #echo $data
    pushData
}

constructXML()
{
    ##Need to replace the < into &lt; , > into &gt; and & into &amp;#####
    echo "<$1><command>$2</command><output><![CDATA[">>$OUTPUTFILE
    eval $2 >> $OUTPUTFILE 2>&1
    echo "]]></output></$1>" >>$OUTPUTFILE
}

pushData()
{
        data=$(cat $OUTPUTFILE)
        eval "type curl > /dev/null 2>&1"

        if [ $? -ne 0 ]
        then
                echo "curl is not installed, so could not post the scan data to $PRODUCT, You can import the  $COMPUTERNAME.xml available in the current directory into $PRODUCT using Stand Alone Workstations Audit. Executing the curl command will lead to the installation."
                exit 1
        fi

    curl --header "Content-Type: text/xml" --data-binary @$OUTPUTFILE "$protocol://$hostName:$portNo/discoveryServlet/WsDiscoveryServlet?COMPUTERNAME=$COMPUTERNAME"
        if [ $? -ne 0 ]
        then
           echo "$PRODUCT is not reachable. You can import the  $COMPUTERNAME.xml available in the current directory into $PRODUCT using Stand Alone Workstations Audit. For further queries, please contact $SUPPORT."
        else
           rm -rf $OUTPUTFILE
           echo "Successfully scanned the system data, Find this machine details in $PRODUCT server."
        fi
}


main $*

Lines 21, 62 and 63 are these:
echo "<?xml version="1.0" encoding="UTF-8" ?><DocRoot>" >$OUTPUTFILE

echo "<$1><command>$2</command><output><![CDATA[">>$OUTPUTFILE

eval $2 >> $OUTPUTFILE 2>&1

The location of OUTPUTFILE is determined by <DocRoot>
How do I change that?
Regards,
Ilia

Best answer by swapple

could you change
OUTPUTFILE="$COMPUTERNAME.xml"
to
OUTPUTFILE="/Users/Shared/$COMPUTERNAME.xml" ?

View original
Did this topic help you find an answer to your question?

3 replies

Forum|alt.badge.img+8
  • Author
  • Contributor
  • 33 replies
  • June 8, 2020

Additional testing shows the same script runs properly on 10.15.5 computer in Terminal.
Why does it fail with read-only errors when running by Jamf policy or in Self Service?
Any ideas?


Forum|alt.badge.img+11
  • Valued Contributor
  • 164 replies
  • Answer
  • June 8, 2020

could you change
OUTPUTFILE="$COMPUTERNAME.xml"
to
OUTPUTFILE="/Users/Shared/$COMPUTERNAME.xml" ?


Forum|alt.badge.img+8
  • Author
  • Contributor
  • 33 replies
  • June 8, 2020

@swhps That works! Thanks a lot! I felt I need to change the path somehow...
I wonder where the OUTPUT file was created before? What is <DocRoot> location?
Anyhow, the problem is solved! One less problem to deal with...


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings