public async Task <WindowsUpdateStatus> ReportWindowsUpdateStatusAsync()
        {
            var request = new Message.GetWindowsUpdatesRequest();

            Message.GetWindowsUpdatesResponse windowsUpdatesResponse = await this._systemConfiguratorProxy.SendCommandAsync(request) as Message.GetWindowsUpdatesResponse;

            WindowsUpdateStatus status;

            status.approved      = windowsUpdatesResponse.configuration.approved;
            status.installable   = windowsUpdatesResponse.configuration.installable;
            status.installed     = windowsUpdatesResponse.configuration.installed;
            status.lastScanTime  = windowsUpdatesResponse.configuration.lastScanTime;
            status.pendingReboot = windowsUpdatesResponse.configuration.pendingReboot;
            status.failed        = windowsUpdatesResponse.configuration.failed;
            status.deferUpgrade  = windowsUpdatesResponse.configuration.deferUpgrade;
            return(status);
        }
        private async Task ReportAllDeviceProperties()
        {
            Debug.WriteLine("ReportAllDeviceProperties");
            Debug.WriteLine("Querying start: " + DateTime.Now.ToString());

            Message.GetTimeInfoResponse timeInfoResponse = await GetTimeInfoAsync();

            Message.GetCertificateConfigurationResponse certificateConfigurationResponse = await GetCertificateConfigurationAsync();

            Message.GetRebootInfoResponse rebootInfoResponse = await GetRebootInfoAsync();

            Message.GetDeviceInfoResponse deviceInfoResponse = await GetDeviceInfoAsync();

            Message.GetWindowsUpdatePolicyResponse windowsUpdatePolicyResponse = await GetWindowsUpdatePolicyAsync();

            Message.GetWindowsUpdatesResponse windowsUpdatesResponse = await GetWindowsUpdatesAsync();

            Debug.WriteLine("Querying end: " + DateTime.Now.ToString());

            Dictionary <string, object> collection = new Dictionary <string, object>();

            collection["microsoft"] = new
            {
                management = new
                {
                    timeInfo            = timeInfoResponse,
                    certificates        = certificateConfigurationResponse,
                    rebootInfo          = rebootInfoResponse,
                    deviceInfo          = deviceInfoResponse,
                    windowsUpdatePolicy = windowsUpdatePolicyResponse.configuration,
                    windowsUpdates      = windowsUpdatesResponse.configuration
                }
            };

            _deviceTwin.ReportProperties(collection);
        }