Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepowershell
titleProcess each device
$count = 1;
$uri_a = -join('http://', $apihost, '/api/v1/devices/?offset=')
$uri_b = '&fetch_size=1'
 
# while ( $count -le $deviceCount )
while ( $count -le 30 )
{
	# Process each device
	
    # Build the URL
     
    $url =  -join ($uri_a, $count, $uri_b )
    $dev = Invoke-RestMethod $url -Credential $credential
	$row = New-Object System.Object

	
	$row | Add-Member -MemberType NoteProperty -Name "DeviceID" -Value $dev.device_id
	$row | Add-Member  -MemberType NoteProperty -Name "LastSeenDate" -Value $dev.last_scan
	$url2 = $dev.self 
    $device = Invoke-RestMethod $url2 -Credential $credential
	
	# Product (i.e. how did we scan it?)
	$row | Add-Member -MemberType NoteProperty -Name "Product" -Value $device.operating_system.product.name
	
	#
	# Do more work
	#
	
    $count = $count + 1;
	$csv += $row
    # display progress
    if ( $count % 10 -eq 0) {
        write-host "." -nonewline
    }	
}

...

Code Block
languagepowershell
titleCompleted Script
collapsetrue
#
# Powershell Script to attempt to replicate the Summary_v1.Device report out of DataHub using Rest API
#

# Define the RestAPI target host and credentials -- Define these to suit your site location

# We use simple authentication, default login/password
$apihost = "iqsonar-host"		# UPDATE THIS for your location
$user    = "admin"				# UPDATE THIS for your location
$pass    = "password"			# UPDATE THIS for your location

$secpass = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user,$secpass)
$uribase = -join ( 'http://', $apihost, '/api/v1/devices')

# Get a count of all devices
$uri = -join($uribase, '?offset=1&fetch_size=1')
$r = Invoke-WebRequest $uri -Credential $credential
 
# $r.headers has HTML headers, $r.content has text content
$deviceCount = $r.headers.'X-fetch-count'

#
# We want to produce a CSV file, so let us build the structure
$csv = @()
$row = New-Object System.Object
$row | Add-Member -MemberType NoteProperty -Name "DeviceID" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "Product" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "DNSHostname" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "DeviceIsVirtualized" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "VirtualizationMethod" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "PhysicalDeviceID" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "PhysicalHostname" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemName" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemVersion" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemEdition" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemRelease" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemInstallDate" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "BiosName" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "BiosVersion" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "BiosVendor" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "DeviceSerialNumber" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "DeviceVendor" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "DeviceModel" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "ProcessorCount" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "ProcessorCoresPerProcessor" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "MotherboardProcessorSocketCount" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "TotalMemory" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "OSReportedMemory" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "ScanStatus" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "LastSeenDate" -Value $null
$csv += $row

$count = 1;
$uri_a = -join('http://', $apihost, '/api/v1/devices/?offset=')
$uri_b = '&fetch_size=1'

 #
while ( $count -le $deviceCount )
while ( $count -le 30 )
{
	# Process each device
	
    # Build the URL
     
    $url =  -join ($uri_a, $count, $uri_b )
    $dev = Invoke-RestMethod $url -Credential $credential
	$row = New-Object System.Object

	
	$row | Add-Member -MemberType NoteProperty -Name "DeviceID" -Value $dev.device_id
	$row | Add-Member  -MemberType NoteProperty -Name "LastSeenDate" -Value $dev.last_scan
	$url2 = $dev.self 
    $device = Invoke-RestMethod $url2 -Credential $credential
	
	# Product (i.e. how did we scan it?)
	$row | Add-Member -MemberType NoteProperty -Name "Product" -Value $device.operating_system.product.name
	$row | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $dev.host_name
	# DNS Hostname. Use FQDN if available, if not use Hostname
	
	if ($device.qualified_name -is [array]) {		
		$row | Add-Member -MemberType NoteProperty -Name "DNSHostname" -Value $device.qualified_name[0].name
	}
	else {
		$row | Add-Member -MemberType NoteProperty -Name "DNSHostname" -Value $dev.host_name
	}
	

	# Device Is Virtual, will contain "true" or "false"
	$row | Add-Member -MemberType NoteProperty -Name "DeviceIsVirtualized" -Value $device.is_virtual
	if ( $device.is_virtual -eq "true" )
	{
		# list info about virtualization and host
		$row | Add-Member -MemberType NoteProperty -Name "VirtualizationMethod" -Value $device.virtualization_platform
		$row | Add-Member -MemberType NoteProperty -Name "PhysicalDeviceID" -Value $device.virtual_host.device_id
		$row | Add-Member -MemberType NoteProperty -Name "PhysicalHostname" -Value $device.virtual_host.host_name
	}
	#
	# Device Operating System columns available in UI do not directly correlate with the fields in the DataHub report
	# because the DataHub output is normalized - this is not done to the data stored in iQSonar itself, but is left to
	# the API clients to normalize according to their own criteria.
	#
	# Best match with the data is as follows
	#
	$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemName" -Value $device.operating_system.description.name
	$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemVersion" -Value $device.operating_system.name
	$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemEdition" -Value $device.operating_system.name
	$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemRelease" -Value $device.operating_system.build_number
	$row | Add-Member -MemberType NoteProperty -Name "OperatingSystemInstallDate" -Value $device.os_install_date
	
	$row | Add-Member -MemberType NoteProperty -Name "BiosName" -Value $device.bios.name
	$row | Add-Member -MemberType NoteProperty -Name "BiosVersion" -Value $device.bios.version
	$row | Add-Member -MemberType NoteProperty -Name "BiosVendor" -Value $device.bios.manufecturer

	$row | Add-Member -MemberType NoteProperty -Name "DeviceSerialNumber" -Value $device.serial_number
	$row | Add-Member -MemberType NoteProperty -Name "DeviceVendor" -Value $device.manufacturer
	$row | Add-Member -MemberType NoteProperty -Name "DeviceModel" -Value $device.model
	$row | Add-Member -MemberType NoteProperty -Name "ProcessorCount" -Value $device.cpu_count
	
	if ($device.cpu -is [array])
	{
		$row | Add-Member -MemberType NoteProperty -Name "ProcessorCoresPerProcessor" -Value $device.cpu[0].core_count
	}
	else {
		$row | Add-Member -MemberType NoteProperty -Name "ProcessorCoresPerProcessor" -Value "0"
	}
	$row | Add-Member -MemberType NoteProperty -Name "MotherboardProcessorSocketCount" -Value "n/a"
	$row | Add-Member -MemberType NoteProperty -Name "TotalMemory" -Value "n/a"
	$row | Add-Member -MemberType NoteProperty -Name "OSReportedMemory" -Value $device.total_memory_mb
	$row | Add-Member -MemberType NoteProperty -Name "ScanStatus" -Value "n/a"
	
	
    $count = $count + 1;
	$csv += $row
    # display progress
    if ( $count % 10 -eq 0) {
        write-host "." -nonewline
    }	
}
$csv | Export-csv output.csv -NoTypeInformation

...