Informatie over SQLite in Remote Desktop
In Remote Desktop worden de verzamelde gegevens in een SQLite-database bewaard.
Informatie over de database
In Remote Desktop wordt de systeeminformatie vastgelegd in een tabel met de naam 'systeminformation'. Historische gegevens worden niet bewaard. Wanneer gegevens worden verzameld, worden eerder vastgelegde gegevens overschreven door de nieuwe waarden. Als je de historische gegevens wilt bewaren, kun je de gegevens vastleggen in een tweede database. De gegevens in de database kunnen ook van pas komen bij de implementatie van macOS, omdat apps toegang tot computerrecords kunnen krijgen of computerspecifieke instellingen kunnen synchroniseren op basis van de waarden in de database.
Om praktische redenen moet je de database gebruiken als alleen-lezendatabase. De databasestructuur kan veranderen om aan de vereisten van nieuwere versies van Remote Desktop te voldoen. In enkele gevallen wordt de database door Remote Desktop opgeschoond om beschadigingen te voorkomen.
De SQLite-database vind je in '/private/var/db/RemoteManagement/RMDB/rmdb.sqlite3'. Aangezien de RMDB-directory is beperkt tot de daemon-gebruiker, is supergebruikerstoegang (sudo) vereist om toegang tot de bestanden te kunnen krijgen. Wanneer je sudo vóór de commando's plaatst, wordt je gevraagd je beheerderswachtwoord in te voeren.
Gegevens ophalen met de commandoregel
De tool sqlite3 is geïnstalleerd in de map '/usr/bin/sqlite3'.
Via de tool sqlite3 heb je toegang tot de tabellen en gegevens in de database van Remote Desktop. Met het volgende commando wordt een SQL-zoekactie uitgevoerd in de tabel 'systeminformation' (de tabel waarin je rapportgegevens worden bewaard).
sudo sqlite3 /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "select * from systeminformation"Hieronder vind je een voorbeeld van de eerste regels in de uitvoer. Afhankelijk van je lettertype en het vensterformaat kunnen de regels teruglopen.
00:0d:93:9c:0a:e4|Mac_HardDriveElement|DataDate|0|2008-12-11T23:05:58Z|2008-12-11T23:05:58Z00:0d:93:9c:0a:e4|Mac_HardDriveElement|Model|0|Hitachi HDS722580VLSA80|2008-12-11T23:05:58Z00:0d:93:9c:0a:e4|Mac_HardDriveElement|VolumeName|0|Server HD|2008-12-11T23:05:58Z00:0d:93:9c:0a:e4|Mac_HardDriveElement|JournalingIsActive|0|true|2008-12-11T23:05:58Z00:0d:93:9c:0a:e4|Mac_HardDriveElement|LastBackupDate|0|2008-09-05T18:13:22Z|2008-12-11T23:05:58Z00:0d:93:9c:0a:e4|Mac_HardDriveElement|LastModificationDate|0|2008-12-11T23:05:57Z|2008-12-11T23:05:58ZJe kunt het scheidingsteken tussen de kolommen aanpassen met de schakeloptie -separator. In dit voorbeeld wordt een komma als scheidingsteken gebruikt.
sudo sqlite3 -separator , /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "select * from systeminformation"Andere handige schakelopties zijn -html, -line, -list en -column. Raadpleeg de man-pagina voor sqlite3 voor meer informatie.
De uitvoer van dit commando wordt in goed leesbare kolommen met kolomkoppen weergegeven.
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 \    "select * from systeminformation"ComputerID        ObjectName           PropertyName ItemSeq    Value                LastUpdated----------------- -------------------- ------------ ---------- -------------------- --------------------00:0d:93:9c:0a:e4 Mac_HardDriveElement DataDate     0          2008-12-11T23:05:58Z 2008-12-11T23:05:58Z00:0d:93:9c:0a:e4 Mac_HardDriveElement Model        0          Hitachi HDS722580VLS 2008-12-11T23:05:58Z00:0d:93:9c:0a:e4 Mac_HardDriveElement VolumeName   0          Server HD            2008-12-11T23:05:58Z00:0d:93:9c:0a:e4 Mac_HardDriveElement JournalingIs 0          true                 2008-12-11T23:05:58Z00:0d:93:9c:0a:e4 Mac_HardDriveElement LastBackupDa 0          2008-09-05T18:13:22Z 2008-12-11T23:05:58Z00:0d:93:9c:0a:e4 Mac_HardDriveElement LastModifica 0          2008-12-11T23:05:57Z 2008-12-11T23:05:58Z00:0d:93:9c:0a:e4 Mac_HardDriveElement TotalSize    0          80287128.000000      2008-12-11T23:05:58ZHet veld ComputerID komt overeen met het Ethernet-MAC-adres van de client die de rapportgegevens heeft verstuurd en kan als unieke waarde in je SQL-zoekacties worden gebruikt. Je kunt alle typen objectnamen weergeven door de SQL-zoekactie in het bovenstaande voorbeeld te wijzigen in:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 \    "SELECT distinct objectname FROM systeminformation"Uitvoer:
ObjectName -------------------- Mac_HardDriveElementMac_NetworkInterfaceMac_SystemInfoElemenMac_RAMSlotElementMac_PCIBusElementMac_USBDeviceElementMac_FireWireDeviceElVoor elke objectnaam is een aantal waarden mogelijk voor propertyname. Als je je zoekactie wijzigt, kun je alle beschikbare paren van objectname/propertyname weergeven:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 \    "SELECT distinct objectname, propertyname FROM systeminformation"Uitvoer:
ObjectName           PropertyName -------------------- ------------Mac_HardDriveElement DataDateMac_HardDriveElement ModelMac_HardDriveElement VolumeNameMac_HardDriveElement JournalingIsMac_HardDriveElement LastBackupDaMac_HardDriveElement LastModificaDeze kenmerken worden gecombineerd, zodat je een SQL-zoekactie kunt samenstellen waarmee een bepaalde waarde wordt opgehaald. Als je bijvoorbeeld de serienummers van clients wilt opvragen, kun je de volgende zoekactie opgeven:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "SELECT distinct computerid, propertyname, value FROM systeminformation WHERE propertyname = 'MachineSerialNumber'"ComputerID        PropertyName        Value ----------------- ------------------- ----------- 00:0d:93:9c:0a:e4 MachineSerialNumber QP4241FHPMZ 00:16:cb:a2:6d:1b MachineSerialNumber YM6090M9U39 00:16:cb:ca:81:52 MachineSerialNumber W862100NW92 00:17:f2:04:db:24 MachineSerialNumber G86492DVX68 00:14:51:22:28:38 MachineSerialNumber W854503QURC 00:17:f2:2b:b9:59 MachineSerialNumber 4H63861KVMMJe kunt met de SQL-zoekactie ook een lijst ophalen met de computernamen (in plaats van de Ethernet-ID's) en -waarden:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "SELECT R1.value, R2.value FROM systeminformation R1, systeminformation R2 WHERE R1.computerid=R2.computerid AND R1.propertyname='ComputerName' AND R2.propertyName='MachineSerialNumber'"Uitvoer:
Value      Value ---------- ----------- mini     X0XX234XYXYX mini       X01X23X4XXXX NetBoot001 X01X0101XXX0 Server     XX12345XXX6 Server2    PPYWWSSSEEER Aga O    X0XX123XY4XYHet sqlite-commando uitvoeren met Automator
Omdat je met Automator shellcommando's kunt uitvoeren, kun je de app gebruiken om sqlite3-uitvoer te verzamelen en naar andere apps te versturen. In het volgende voorbeeld worden de rapportgegevens verzameld en naar Teksteditor verstuurd:
on run {input, parameters}    return do shell script "/usr/bin/sqlite3 -separator " & quote & tab & quote & " /var/db/RemoteManagement/RMDB/rmdb.sqlite3 " & quote & input & quote with administrator privilegesend runIn de takenreeks wordt gevraagd om een SQL-commando en wordt vervolgens een shellcommando gemaakt via de taak 'Voer AppleScript uit', waarna een venster voor de identiteitscontrole kan worden weergegeven. In het voorbeeld wordt een tab als scheidingsteken gebruikt.
Onderdelen van sqlite-zoekactie
De volgende onderdelen kunnen met een sqlite-zoekactie worden opgevraagd:
Mac_SystemInfoElement
- ActiveProcessorCount 
- AppleTalkIsActive 
- ATADeviceCount 
- ARDComputerInfo1 
- ARDComputerInfo2 
- ARDComputerInfo3 
- ARDComputerInfo4 
- BootROMVersion 
- BusDataSize 
- BusSpeed 
- BusSpeedString 
- ComputerName 
- DataDate 
- En0Address 
- FileSharingIsEnabled 
- FireWireDeviceCount 
- FTPIsEnabled 
- HasKeyboardConnected 
- HasLightsOutController 
- HasMouseConnected 
- HasVectorProcessingUnit 
- KernelVersion 
- Level2CacheSize 
- MachineClass 
- MachineModel 
- MachineSerialNumber 
- MainMonitorDepth 
- MainMonitorHeight 
- MainMonitorType 
- MainMonitorWidth 
- ModemCountryInfo 
- ModemDescription 
- ModemDriverInfo 
- ModemInstalled 
- ModemInterfaceType 
- OpticalDriveType 
- PCISlotsUsedCount 
- PhysicalMemorySize 
- PrimaryIPAddress 
- PrimaryNetworkCollisions 
- PrimaryNetworkFlags 
- PrimaryNetworkHardwareAddress 
- PrimaryNetworkInputErrors 
- PrimaryNetworkInputPackets 
- PrimaryNetworkOutputErrors 
- PrimaryNetworkOutputPackets 
- PrimaryNetworkType 
- PrinterSharingEnabled 
- ProcessorCount 
- ProcessorSpeed 
- ProcessorSpeedString 
- ProcessorType 
- RemoteAppleEventsEnabled 
- RemoteLoginEnabled 
- SCSIDeviceCount 
- SelectedPrinterName 
- SelectedPrinterPostScriptVersion 
- SelectedPrinterType 
- SleepDisplayWhenInactive 
- SleepWhenInactive 
- SpinDownHardDrive 
- SystemVersion 
- SystemVersionString 
- TotalFreeHardDriveSpace 
- TotalHardDriveSpace 
- TotalRAMSlots 
- TotalSwapFileSize 
- TrashSize 
- UnixHostName 
- UnusedRAMSlots 
- USBDeviceCount 
- UserMemorySize 
- WakeOnLanEnabled 
- WebSharingIsEnabled 
- WindowsFileSharingEnabled 
- WirelessCardFirmwareVersion 
- WirelessCardHardwareAddress 
- WirelessCardIsActive 
- WirelessCardInstalled 
- WirelessCardLocale 
- WirelessCardType 
- WirelessChannelNumber 
- WirelessIsComputerToComputer 
- WirelessNetworkAvailable 
- WirelessNetworkName 
Mac_HardDriveElement
- CreationDate 
- DataDate 
- FileSystemType 
- FreeSpace 
- GroupName 
- IsBootVolume 
- IsCasePreserving 
- IsCaseSensitive 
- IsDetachable 
- IsWritable 
- JournalingIsActive 
- LastBackupDate 
- LastConsistencyCheckDate 
- LastModificationDate 
- LogicalUnitNumber 
- Manufacturer 
- Model 
- OwnerName 
- PermissionModes 
- PermissionsAreEnabled 
- Protocol 
- RemovableMedia 
- Revision 
- SerialNumber 
- SupportsJournaling 
- TotalFileCount 
- TotalFolderCount 
- TotalSize 
- UnixMountPoint 
- VolumeName 
Mac_NetworkInterfaceElement
- AllDNSServers 
- AllIPAddresses 
- ConfigurationName 
- ConfigurationType 
- DataDate 
- DomainName 
- EthernetAlignmentErrors 
- EthernetCarrierSenseErrors 
- EthernetChipSet 
- EthernetCollisionFrequencies 
- EthernetDeferredTransmissions 
- EthernetExcessiveCollisions 
- EthernetFCSErrors 
- EthernetFrameTooLongs 
- EthernetInternalMacRxErrors 
- EthernetInternalMacTxErrors 
- EthernetLateCollisions 
- EthernetMissedFrames 
- EthernetMultipleCollisionFrames 
- EthernetRxCollisionErrors 
- EthernetRxFrameTooShorts 
- EthernetRxInterrupts 
- EthernetRxOverruns 
- EthernetRxPHYTransmissionErrors 
- EthernetRxResets 
- EthernetRxResourceErrors 
- EthernetRxTimeouts 
- EthernetRxWatchdogTimeouts 
- EthernetSingleCollisionFrames 
- EthernetSQETestErrors 
- EthernetTxInterrupts 
- EthernetTxJabberEvents 
- EthernetTxPHYTransmissionErrors 
- EthernetTxResets 
- EthernetTxResourceErrors 
- EthernetTxTimeouts 
- EthernetTxUnderruns 
- HardwareAddress 
- InterfaceFlags 
- InterfaceName 
- IsActive 
- IsPrimary 
- NetworkCollisions 
- NetworkInputErrors 
- NetworkInputPackets 
- NetworkOutputErrors 
- NetworkOutputPackets 
- OutputQueueCapacity 
- OutputQueueDropCount 
- OutputQueueOutputCount 
- OutputQueuePeakSize 
- OutputQueueRetryCount 
- OutputQueueSize 
- OutputQueueStallCount 
- PrimaryDNSServer 
- PrimaryIPAddress 
- RouterAddress 
Mac_USBDeviceElement
- BusPower 
- DataDate 
- DeviceSpeed 
- ProductID 
- ProductName 
- SerialNumber 
- VendorID 
Mac_FireWireDeviceElement
- DataDate 
- DeviceSpeed 
- Manufacturer 
- Model 
Mac_RAMSlotElement
- DataDate 
- MemoryModuleSize 
- MemoryModuleSpeed 
- MemoryModuleSpeed 
- MemoryModuleSpeed 
Mac_PCIBusElement
- CardMemory 
- CardName 
- CardRevision 
- CardType 
- DataDate 
- DeviceID 
- RomRevision 
- SlotName 
- VendorID