ConnectWise Automate Computer Management
Overview
Computers are the core managed entities in ConnectWise Automate. Each computer represents an endpoint with the Automate agent installed - workstations, servers, or network devices. This skill covers computer identification, status monitoring, inventory, patch management, and antivirus status.
Key Concepts
Computer Identifiers
Every computer has multiple identifiers:
| Identifier | Type | Description | Example |
|---|---|---|---|
ComputerID | integer | Primary key, auto-incrementing | 12345 |
Name | string | Computer hostname | ACME-DC01 |
ComputerGUID | string | Globally unique identifier | a1b2c3d4-e5f6-7890-abcd-ef1234567890 |
LastContact | datetime | Last agent check-in time | 2024-02-15T10:30:00Z |
MAC | string | Primary MAC address | 00:1A:2B:3C:4D:5E |
Computer Status Values
| Status | Description | Business Impact |
|---|---|---|
Online | Agent actively checking in | Normal operation |
Offline | No agent communication | May require attention |
Degraded | Agent checking in with issues | Performance concerns |
Unknown | Status undetermined | Check connectivity |
Operating System Types
| OS Type | Examples |
|---|---|
Windows Server | 2016, 2019, 2022 |
Windows Workstation | Windows 10, Windows 11 |
macOS | Monterey, Ventura, Sonoma |
Linux | Ubuntu, CentOS, RHEL |
Field Reference
Core Computer Fields
interface Computer {
// Identifiers
ComputerID: number; // Primary key
Name: string; // Hostname
ComputerGUID: string; // GUID
// Client/Location Association
ClientID: number; // Parent client ID
LocationID: number; // Location within client
Client: {
Name: string; // Client name
};
Location: {
Name: string; // Location name
};
// Status
Status: string; // Online, Offline, Degraded
LastContact: string; // ISO datetime of last check-in
Uptime: number; // Uptime in seconds
// Network
IPAddress: string; // Internal IP
ExternalIP: string; // External/public IP
DefaultGateway: string; // Gateway IP
MAC: string; // Primary MAC address
// Operating System
OS: string; // "Windows 10 Pro"
OSType: string; // "Windows", "macOS", "Linux"
OSVersion: string; // "10.0.19045"
SerialNumber: string; // OS serial/product key
// Hardware
Manufacturer: string; // "Dell Inc."
Model: string; // "OptiPlex 7090"
TotalMemory: number; // RAM in MB
ProcessorName: string; // CPU model
ProcessorCount: number; // Number of CPUs
// Agent
AgentVersion: string; // "2023.1.0.123"
RemoteAgentVersion: string; // Remote agent version
// Timestamps
DateAdded: string; // When computer was added
LastInventory: string; // Last inventory scan
LastPatched: string; // Last patch operation
// Extra Data Fields (EDFs)
ExtraData: {
[key: string]: string; // Custom fields
};
}
Computer Inventory Fields
interface ComputerInventory {
// Disk Information
Drives: DriveInfo[];
// Software
Software: SoftwareItem[];
// Hardware
Memory: MemoryModule[];
NetworkAdapters: NetworkAdapter[];
Printers: Printer[];
// Services
Services: Service[];
// Monitors/Displays
Monitors: Monitor[];
}
interface DriveInfo {
Letter: string; // "C:"
Type: string; // "Fixed", "Network", "Removable"
FileSystem: string; // "NTFS"
TotalSize: number; // Size in MB
FreeSpace: number; // Free space in MB
PercentFree: number; // Percentage free
}
interface SoftwareItem {
Name: string; // Application name
Publisher: string; // Software publisher
Version: string; // Installed version
InstallDate: string; // When installed
}
API Patterns
List All Computers
GET /cwa/api/v1/Computers?pageSize=250
Authorization: Bearer {token}
Response:
[
{
"ComputerID": 12345,
"Name": "ACME-DC01",
"ClientID": 100,
"LocationID": 1,
"Status": "Online",
"IPAddress": "192.168.1.10",
"OS": "Windows Server 2022 Standard",
"LastContact": "2024-02-15T10:30:00Z",
"Client": {
"Name": "Acme Corporation"
},
"Location": {
"Name": "Main Office"
}
}
]
Get Single Computer
GET /cwa/api/v1/Computers/{computerID}
Authorization: Bearer {token}
Response:
{
"ComputerID": 12345,
"Name": "ACME-DC01",
"ComputerGUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"ClientID": 100,
"LocationID": 1,
"Status": "Online",
"IPAddress": "192.168.1.10",
"ExternalIP": "203.0.113.50",
"MAC": "00:1A:2B:3C:4D:5E",
"OS": "Windows Server 2022 Standard",
"OSVersion": "10.0.20348",
"Manufacturer": "Dell Inc.",
"Model": "PowerEdge R640",
"SerialNumber": "ABC1234567",
"TotalMemory": 32768,
"ProcessorName": "Intel Xeon Gold 6230",
"AgentVersion": "2023.1.0.123",
"LastContact": "2024-02-15T10:30:00Z",
"Uptime": 864000,
"DateAdded": "2023-01-15T08:00:00Z"
}
Filter Computers by Client
GET /cwa/api/v1/Computers?condition=ClientID = 100&pageSize=250
Authorization: Bearer {token}
Filter Computers by Status
GET /cwa/api/v1/Computers?condition=Status = 'Online'&pageSize=250
Authorization: Bearer {token}
Filter by OS Type
GET /cwa/api/v1/Computers?condition=OS contains 'Windows Server'&pageSize=250
Authorization: Bearer {token}
Get Computer Drives
GET /cwa/api/v1/Computers/{computerID}/Drives
Authorization: Bearer {token}
Response:
[
{
"DriveID": 1,
"Letter": "C:",
"Type": "Fixed",
"FileSystem": "NTFS",
"TotalSize": 500000,
"FreeSpace": 150000,
"PercentFree": 30
}
]
Get Computer Software
GET /cwa/api/v1/Computers/{computerID}/Software
Authorization: Bearer {token}
Get Patch Status
GET /cwa/api/v1/Computers/{computerID}/Patches
Authorization: Bearer {token}
Response:
{
"Installed": 145,
"Missing": 3,
"Pending": 2,
"Failed": 0,
"Patches": [
{
"KBID": "KB5034441",
"Title": "2024-01 Security Update",
"Status": "Missing",
"Severity": "Critical",
"ReleaseDate": "2024-01-09T00:00:00Z"
}
]
}
Get Antivirus Status
GET /cwa/api/v1/Computers/{computerID}/Antivirus
Authorization: Bearer {token}
Response:
{
"Product": "Windows Defender",
"Version": "4.18.2401.7",
"DefinitionVersion": "1.405.123.0",
"DefinitionDate": "2024-02-15T00:00:00Z",
"RealTimeProtection": true,
"LastScan": "2024-02-15T03:00:00Z",
"ScanType": "Quick",
"ThreatsFound": 0
}
Workflows
Computer Lookup by Hostname
async function findComputerByHostname(client, hostname) {
const computers = await client.request(
`/Computers?condition=Name contains '${hostname}'&pageSize=100`
);
if (computers.length === 0) {
return { found: false, suggestions: [] };
}
if (computers.length === 1) {
return { found: true, computer: computers[0] };
}
return {
found: false,
ambiguous: true,
suggestions: computers.map(c => ({
name: c.Name,
id: c.ComputerID,
client: c.Client?.Name,
status: c.Status
}))
};
}
Computer Lookup by IP Address
async function findComputerByIP(client, ipAddress) {
const computers = await client.request(
`/Computers?condition=IPAddress = '${ipAddress}' or ExternalIP = '${ipAd