Este artigo foi projetado para dar suporte a pessoas que provisionam ou gerenciam dispositivos com o Azure IoT. Se isso não soar como você, considere dar uma olhada na documentação do Audiences for OSConfig.
O recurso CommandRunner -->RunCommand permite que você troque alguma simplicidade para obter flexibilidade. Quando precisar, você pode descartar um nível de abstração para executar relatórios e configurações personalizados.
Exemplos comuns de relatórios personalizados e configuração
Verificar a conectividade do dispositivo com pontos de extremidade de chave
Verificar se daemons específicos estão em execução
Depurar ou solucionar problemas de dispositivos, por exemplo, coletando arquivos de log e carregando-os no armazenamento em nuvem
Configure todos os dispositivos para usar o fuso horário desejado ao registrar dados em log, gerar carimbos de data/hora etc.
Relatar (ou configurar) seus próprios componentes de dispositivo exclusivos sobre os quais o OSConfig nunca saberia
As possibilidades são infinitas, quase qualquer tarefa que você possa fazer em um shell para um dispositivo, você pode fazer com o Azure IoT e o OSConfig CommandRunner para frotas de dispositivos
Esses exemplos podem servir como pontos de partida para você se adaptar ao seu ambiente exclusivo.
Cada exemplo inclui etapas e capturas de tela para trabalhar no portal do Azure e para trabalhar em bash com a CLI do Azure.
Cada exemplo também inclui variações para um dispositivo (por exemplo, um cenário de solução de problemas) ou para muitos dispositivos (por exemplo, um cenário de provisionamento de configuração ou relatório).
O que esperar:
Nas instruções de dispositivo único, você lerá e gravará as propriedades relatadas e desejadas diretamente no gêmeo OSConfig para um dispositivo. Nas instruções em escala, você usará Hub IoT Configurações (também conhecidas como Gerenciamento de Dispositivos Automática ou ADM) para enviar propriedades desejadas por push para muitos gêmeos e usar Hub IoT Consultas (independentemente ou anexadas às Configurações como Métricas) para observar os resultados provenientes dos dispositivos.
Pré-requisitos para os exemplos a seguir
Se você estiver usando este artigo para referência (por exemplo, você está aqui para copiar um nome de propriedade), não há pré-requisitos.
Se você quiser experimentar os exemplos em sistemas dinâmicos (recomendado), então:
Você precisará de uma conta do Azure com um Hub IoT
Este artigo pressupõe alguma familiaridade com Hub IoT e ferramentas relacionadas. Por exemplo, ele pressupõe que você esteja confortável criando Hubs IoT e anexando dispositivos. Se você preferir uma introdução passo a passo mais prescritiva à instalação e ao uso do OSConfig do zero, consulte: Início Rápido: Gerenciar um único dispositivo IoT virtual usando a CLI do Azure .
Você precisará de pelo menos um dispositivo Linux com o agente OSConfig instalado e conectado ao Azure IoT.
Verifique se você está conectado ao Portal do Azure e pode acessar a página visão geral do Hub IoT
Entre no Portal do Azure com a conta que você deseja usar
Iniciar o Azure Cloud Shell no modo bash Captura de
(opcional) Use o comando az account show para garantir que você esteja conectado ao contexto que deseja usar para os exemplos.
Dica
Há duas coisas que você deve saber sobre o comportamento do CommandRunner para ter êxito usando estes exemplos:
Conforme demonstrado nos exemplos, cada nova solicitação deve incluir um novo valor para commandId (pode ser qualquer cadeia de caracteres, por exemplo, "MyCmd01", "MyCmd02").
O processo é assíncrono, portanto, os resultados não estão disponíveis instantaneamente. O procedimento mais simples é aguardar cerca de um minuto depois de iniciar uma solicitação CommandRunner. Após esse minuto, sem etapas extras de sua parte, os resultados estarão disponíveis em properties.reported.CommandRunner.commandStatus. Para saber mais sobre o comportamento de atualização, atualizações de status assíncrono, etc., consulte: Como interagir com o recurso CommandRunner do OSConfig e do Azure IoT.
Exemplo 1. Verificar a conectividade do dispositivo com pontos de extremidade específicos
Neste exemplo, pedimos que os dispositivos façam ping www.github.com três vezes. Observamos o código de saída do ping (êxito ou falha) e podemos observar a saída textual do comando ping.
Na página do portal do seu Hub IoT, navegue até o gêmeo do módulo OSConfig para o dispositivo que você deseja gerenciar. Em seguida, adicione o seguinte à properties.desired seção (seguido por uma vírgula para separá-la do próximo item).properties.desired
Você pode verificar a conectividade do dispositivo verificando a resposta ao comando ping do módulo gêmeo OSConfig em si. Role para baixo o módulo gêmeo para encontrar as propriedades relatadas para CommandRunner. Verificar o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do comando ping .
Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento> de dispositivo --Configurações -->Adicionar Configuração do Módulo.
Especifique um nome e defina as Configurações do Gêmeo com a configuração desejada do gerenciador de pacotes. Defina a Propriedade Módulo Gêmeo como properties.desired.CommandRunner e defina o conteúdo da propriedade Módulo Gêmeo para o seguinte:
Crie uma Métrica Personalizada com nomes bem-sucedidos e os Critérios de Métrica , conforme mostrado abaixo. Essa consulta de métrica identificará todos os dispositivos que fizeram ping com êxito no ponto de extremidade.
SELECT deviceId FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.resultCode = 0
AND properties.reported.CommandRunner.commandStatus.commandId = 'pingcmd'
Para os Módulos de Destino, especifique os critérios para os quais os dispositivos estão no escopo. Neste exemplo, vamos direcionar todos os dispositivos habilitados para OSConfig, especificando uma condição de destino de FROM devices.modules where moduleId='osconfig'
Para observar quais dispositivos gêmeos foram atualizados com o conteúdo de propriedade gêmeo desejado (lado da nuvem), consulte a métrica Aplicada (também conhecida como appliedCount)
Para observar quais dispositivos fizeram ping com êxito no ponto de extremidade, consulte a métrica de êxito personalizada criada acima.
Você também pode verificar a saída do comando ping usado neste exemplo usando a consulta a seguir. Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivo -->Consultas na navegação à esquerda.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'pingcmd'
Use o comando de exemplo a seguir para definir o gêmeo OSConfig de um único dispositivo, substituindo <a ID> do dispositivo e/ou <o nome> do hub para corresponder ao seu ambiente.
Você pode verificar a conectividade do dispositivo verificando a resposta para o comando ping . Use o comando de exemplo a seguir que obtém o resultado do comando ping, substituindo <a ID> do dispositivo e/ou <o nome> do hub para corresponder ao seu ambiente. Verificar o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do comando ping .
az iot hub query -q \
"SELECT properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig'
AND deviceId='<device id>'" --hub-name <hub name> --output table
Use o comando de exemplo a seguir para criar uma configuração de Hub IoT para verificar a conectividade de rede de uma frota de dispositivos conectados a um Hub IoT. Essa Configuração inclui critérios de direcionamento, métricas personalizadas e a configuração desejada. Substitua o nome> do< hub pelo nome do Hub IoT.
az iot hub configuration create -c "checkconnectivity_devicefleet" --content \
'{"moduleContent":
{"properties.desired.CommandRunner":
{"commandArguments":
{"commandId": "checkconnectivity_devicefleet",
"arguments": "ping -c 3 www.github.com",
"timeout": 120,
"singleLineTextResult": false,
"action": 3
}}}}' \
--target-condition "from devices.modules where moduleId='osconfig'" --priority 10 \
--metrics "{\"metrics\": {\"queries\": {\"successfulpings\":\"select deviceId from devices.modules \
where moduleId='osconfig' AND properties.reported.CommandRunner.commandStatus.resultCode=0 \
and properties.reported.CommandRunner.commandStatus.commandId='checkconnectivity_devicefleet'\"}}}" \
--hub-name <hub name>
Para observar quais dispositivos gêmeos foram atualizados com o conteúdo de propriedade gêmeo desejado (lado da nuvem), consulte a métrica Aplicada (também conhecida como appliedCount). Para observar quais dispositivos fizeram ping com êxito no ponto de extremidade, consulte a métrica de êxito personalizada criada acima.
Use os comandos a seguir para verificar se há métricas aplicadas e personalizadas com êxito.
az iot hub configuration show-metric --metric-id appliedCount \
-c "checkconnectivity_devicefleet" \
-n <hub name> --metric-type system
az iot hub configuration show-metric --metric-id successfulpings \
-c "checkconnectivity_devicefleet" \
-n <hub name> --metric-type user
Usando o comando a seguir, você pode verificar os resultados do comando ping para cada dispositivo para ver se ele foi bem-sucedido ou não. Verificar o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do comando ping .
az iot hub query -q \
"SELECT deviceId, properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig'" \
--output table --hub-name <hub name> --output table
Você também pode verificar a saída do comando ping usado neste exemplo usando a consulta a seguir. Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivo -->Consultas na navegação à esquerda. textResult da saída mostrará o conteúdo do arquivo desejado.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'checkconnectivity_devicefleet'
Exemplo 2. Obter conteúdo de /etc/ssh/sshd_config
Neste exemplo, usamos CommandRunner para capturar o conteúdo de um arquivo de cada dispositivo. Neste exemplo, não carregamos explicitamente o arquivo em nenhum serviço de armazenamento em nuvem, mas simplesmente capturamos seu conteúdo no gêmeo.
Importante
As atualizações de propriedade gêmeo são limitadas a 4KB. A abordagem mostrada aqui captura o conteúdo do arquivo (de cat) embutido no gêmeo. Para arquivos muito pequenos, essa abordagem tem o benefício de não exigir nenhum serviço de armazenamento ou credenciais externos. Para arquivos maiores, essa abordagem não é aplicável. Em vez disso, você incluiria a lógica em seu script/comando para carregar o arquivo no local ou no armazenamento em nuvem de sua escolha. Por exemplo, você pode se conectar a um compartilhamento cifs e copiar o arquivo lá ou enviar o conteúdo do arquivo por push para o Armazenamento do Azure.
Na página do portal do seu Hub IoT, navegue até o gêmeo OSConfig para o dispositivo que você deseja gerenciar. Em seguida, adicione o seguinte à properties.desired seção (seguido por uma vírgula para separá-la do próximo item).properties.desired Você pode substituir o nome de arquivo de sua escolha no campo de argumentos abaixo.
Você pode ver o conteúdo do arquivo do módulo gêmeo em si. Role para baixo o módulo gêmeo para localizar commandStatus em propriedades relatadas para CommandRunner, aqui você verá isso no textResult. Verifique o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostrará o conteúdo do arquivo desejado.
Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento> de dispositivo --Configurações -->Adicionar Configuração do Módulo.
Especifique um nome e defina as Configurações do Gêmeo com a configuração desejada do gerenciador de pacotes. Defina a Propriedade Módulo Gêmeo como properties.desired.CommandRunner e defina o conteúdo da propriedade Módulo Gêmeo para o seguinte:
Para os Módulos de Destino, especifique os critérios para os quais os dispositivos estão no escopo. Neste exemplo, vamos direcionar todos os dispositivos habilitados para OSConfig, especificando uma condição de destino de FROM devices.modules where moduleId='osconfig'
Para observar quais dispositivos gêmeos foram atualizados com o conteúdo de propriedade gêmeo desejado (lado da nuvem), consulte a métrica Aplicada (também conhecida como appliedCount)
Você também pode ler o conteúdo do arquivo neste exemplo usando a consulta a seguir. Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivo -->Consultas na navegação à esquerda. O conteúdo do arquivo real pode ser visto em commandStatus.textResult.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'sshdconfigfile_contents'
Use o comando de exemplo a seguir para iniciar a solicitação (colocando sua solicitação na properties.desired seção do gêmeo).
Use o comando a seguir para ver os resultados. Verifique o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostrará o conteúdo do arquivo desejado.
az iot hub query --output table -q \
"SELECT properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig'
AND deviceID='<device id>'" --hub-name <hub name>
Use o comando de exemplo a seguir para criar uma configuração de Hub IoT. Essa Configuração inclui critérios de direcionamento, a configuração desejada. Substitua o nome do hub pelo nome do Hub IoT.
Use o comando a seguir para ver os resultados. Verificar o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra o conteúdo do arquivo.
az iot hub query -q \
"SELECT deviceId, properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig'" \
--output table --hub-name <hub name>
Para observar quais dispositivos gêmeos foram atualizados com o conteúdo de propriedade gêmeo desejado (lado da nuvem), consulte a métrica Aplicada (também conhecida como appliedCount).
Use o comando a seguir para verificar a métrica Aplicada .
az iot hub configuration show-metric --metric-id appliedCount \
-c "sshdconfigfile_contents" \
-n <hub name> --metric-type system
Você também pode ler o conteúdo do arquivo usando a consulta a seguir. Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivo -->Consultas na navegação à esquerda.
SELECT deviceId, properties.reported.CommandRunner.commandStatus,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'sshdconfigfile_contents'
Exemplo 3. Implantar um script embutido simples para definir o fuso horário como UTC e relatar o fuso horário
Este exemplo ilustra um caso de uso simples em que o script e os resultados podem ser tratados embutidos como parte do gêmeo. O exemplo aqui definirá o fuso horário como UTC e, em seguida, consultará o fuso horário depois de definido.
Na página do portal do seu Hub IoT, navegue até o gêmeo OSConfig para o dispositivo que você deseja gerenciar e adicione o seguinte à properties.desired seção, seguido por uma vírgula para separá-lo do próximo item em properties.desired. action=3 abaixo especifica a ação RunCommand .
Depois que o comando for executado, role para baixo o módulo gêmeo para encontrar commandStatus sob as propriedades relatadas para CommandRunner, aqui você verá o textResult exibir o conjunto de fuso horário atual no dispositivo.
Para definir ou atualizar o fuso horário de uma frota de dispositivos para UTC, como neste exemplo, você criará uma configuração de Hub IoT (também conhecida como Hub IoT Gerenciamento de Dispositivos automática [ADM]).
Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento> de dispositivo --Configurações -->Adicionar Configuração do Módulo.
Especifique um nome e defina as Configurações do Gêmeo com a configuração desejada do gerenciador de pacotes. Defina a Propriedade Módulo Gêmeo como properties.desired.CommandRunner e defina o conteúdo da propriedade Módulo Gêmeo para o seguinte:
Para os Módulos de Destino, especifique os critérios para os quais os dispositivos estão no escopo. Neste exemplo, vamos direcionar todos os dispositivos habilitados para OSConfig, especificando uma condição de destino de FROM devices.modules where moduleId='osconfig'
Crie uma métrica personalizada com o nome configurado com êxito e os Critérios de Métrica , conforme mostrado abaixo. Essa consulta de métrica identificará todos os dispositivos que atualizaram com êxito o fuso horário.
SELECT deviceId FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.resultCode = 0
AND properties.reported.CommandRunner.commandStatus.commandId = 'settimezone_config'
Depois que a configuração for aplicada aos dispositivos, você poderá verificar quais dispositivos gêmeos foram atualizados com o conteúdo de propriedade gêmeo desejado (lado da nuvem), verificando a métrica Aplicada (também conhecida como appliedCount). Para ver quais dispositivos atualizaram com êxito o fuso horário, consulte a métrica personalizada configurada com êxito criada acima.
Você também pode ler o fuso horário atual nesses dispositivos a partir deste exemplo usando a consulta a seguir. Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivo -->Consultas na navegação à esquerda. Você pode verificar o fuso horário atual nesses dispositivos em commandStatus.textResult.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'settimezone_config'
Use o exemplo a seguir para definir o fuso horário no dispositivo e, em seguida, ler o fuso horário atual. action=3 abaixo especifica a ação RunCommand . substituindo <a ID> do dispositivo e/ou <o nome> do hub para corresponder ao seu ambiente..
Você pode consultar o resultado do comando acima e verificar o fuso horário atual no dispositivo usando o exemplo a seguir. Verificar o resultCode: 0 que indica que o comando foi bem-sucedido e textResult mostrará o fuso horário atual.
az iot hub query -q \
"SELECT properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig'
AND deviceID='<device id>'" --hub-name <hub name> --output table
Use o comando de exemplo a seguir para criar uma configuração de Hub IoT. Essa Configuração inclui critérios de direcionamento, a configuração desejada. Substitua o nome do hub pelo nome do Hub IoT.
az iot hub configuration create -c "settimezone_config" --content \
'{"moduleContent":
{"properties.desired.CommandRunner":
{"commandArguments":
{"commandId": "settimezone_cmd",
"arguments": "timedatectl set-timezone Etc/UTC | timedatectl | grep Time",
"timeout": 30,
"singleLineTextResult": false,
"action": 3
}}}}' \
--target-condition "from devices.modules where moduleId='osconfig'" --priority 10 \
--metrics "{\"metrics\": {\"queries\": {\"successfullyconfigured\":\"select deviceId from devices.modules \
where moduleId='osconfig' AND properties.reported.CommandRunner.commandStatus.resultCode=0 \
and properties.reported.CommandRunner.commandStatus.commandId='settimezone_cmd'\"}}}" \
--hub-name <hub-name>
Você pode consultar se o fuso horário está definido nos dispositivos usando o exemplo a seguir. O fuso horário atual pode ser visto em commandStatus.textResult.
az iot hub query -q \
"SELECT deviceId, properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig'" \
--output table --hub-name <hub name>
Para observar quais dispositivos gêmeos foram atualizados com o conteúdo de propriedade gêmeo desejado (lado da nuvem), consulte a métrica Aplicada (também conhecida como appliedCount). Para observar quais dispositivos executaram ping com êxito no ponto de extremidade, consulte a métrica personalizada configurada com êxito criada acima.
Use os comandos a seguir para verificar essas duas métricas.
az iot hub configuration show-metric --metric-id appliedCount \
-c "settimezone_config" \
-n <hub name> --metric-type system
az iot hub configuration show-metric --metric-id successfullyconfigured \
-c "settimezone_config" \
-n <hub name> --metric-type user
Exemplo 4. Implantar um script de relatório personalizado de um repositório online
Este exemplo ilustra a chamada de um script localizado fora do gêmeo. Por exemplo, você pode colocar seus scripts no GitHub. Esse padrão pode surgir por necessidade (o script é muito grande para gêmeos) ou fora de preferência. O comando no gêmeo é um wrapper simples. Ele baixa o script principal e o executa.
Importante
Para dar suporte a este documento, publicamos um script de exemplo. Este script de exemplo é fornecido como um stand-in para seu próprio script no GitHub ou em outro lugar. Ele coleta alguns pontos de dados do dispositivo, incluindo um carimbo de data/hora, status de daemon e espaço livre em disco. Você deve inspecionar scripts da Internet, incluindo este, antes de executá-los em seus dispositivos.
Na página do portal do Hub IoT, navegue até o gêmeo OSConfig para o dispositivo que você deseja gerenciar e adicione o seguinte à properties.desired seção, seguido por uma vírgula para separá-lo do próximo item em properties.desired.
Role para baixo o módulo gêmeo para encontrar CommandRunner -->commandStatus na seção de propriedades relatadas do gêmeo. Verifique se há resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do script executado. Veja a seguir a saída de exemplo obtida do gêmeo OSConfig de um dispositivo:
Para baixar e instalar um aplicativo ou executar um script em uma frota de dispositivos, como neste exemplo, você criará uma configuração de Hub IoT (também conhecida como Hub IoT Gerenciamento de Dispositivos automática [ADM]).
Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivo -->Configurações -->Adicionar Configuração do Módulo.
Especifique um nome e defina as Configurações do Gêmeo com a configuração desejada do gerenciador de pacotes. Defina a propriedade Module Twin como properties.desired.CommandRunner e defina o conteúdo da propriedade Module Twin como o seguinte.
Para os Módulos de Destino, especifique os critérios para os quais os dispositivos estão no escopo. Neste exemplo, vamos direcionar todos os dispositivos habilitados para OSConfig, especificando uma condição de destino de FROM devices.modules where moduleId='osconfig'
Crie uma Métrica Personalizada com o nome executado com êxito e os Critérios de Métrica , conforme mostrado abaixo. Essa consulta de métrica identificará todos os dispositivos em que o script foi executado ou executado com êxito.
SELECT deviceId
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.resultCode = 0
AND properties.reported.CommandRunner.commandStatus.commandId = 'runcustomscript_configuration'
Depois que a configuração for aplicada aos dispositivos, você poderá verificar quais gêmeos dos dispositivos foram atualizados com o conteúdo da propriedade gêmeo desejado (lado da nuvem), verificando a métrica aplicada (também conhecida como appliedCount). Para ver quais dispositivos atualizaram com êxito o fuso horário, consulte a métrica de execução personalizada criada acima.
Você também pode verificar se a configuração acima foi aplicada com êxito e se a instalação foi bem-sucedida usando a consulta a seguir. Na página do portal do seu Hub IoT do Azure, escolha Gerenciamento de dispositivos -->Consultas na navegação à esquerda. Verifique o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do script.
SELECT deviceId, properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'runcustomscript_configuration'
O exemplo a seguir mostra o download e a execução de um script simples em um dispositivo específico. substituindo <a ID> do dispositivo e/ou <o nome> do hub para corresponder ao seu ambiente..
Você pode consultar o resultado do script acima no dispositivo usando o exemplo a seguir. Verifique o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do script.
az iot hub query -q \
"SELECT properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig' AND properties.reported.CommandRunner.commandStatus.commandId = 'runcustomscript'
AND deviceId = '<device id>'" \
--hub-name <hub name> --output table
Use o comando de exemplo a seguir para criar um Hub IoT Configuration para baixar e executar um script personalizado em vários dispositivos. Essa Configuração inclui critérios de direcionamento e a configuração desejada. Substitua o nome do hub pelo seu nome Hub IoT.
az iot hub configuration create -c "runcustomscript_multipledevices" --content \
'{"moduleContent":
{"properties.desired.CommandRunner":
{"commandArguments":
{"commandId": "runcustomscript_multipledevices",
"arguments": "curl -s -L 'https://learn.microsoft.com/azure/osconfig/samples/report-multiple-datapoints-from-device.sh' | tr -d \'\r'| bash",
"timeout": 60,
"singleLineTextResult": false,
"action": 3
}}}}' \
--target-condition "from devices.modules where moduleId='osconfig'" --priority 10 \
--metrics "{\"metrics\": {\"queries\": {\"successfulruns\":\"select deviceId from devices.modules \
where moduleId='osconfig' AND properties.reported.CommandRunner.commandStatus.resultCode=0 \
and properties.reported.CommandRunner.commandStatus.commandId='runcustomscript_multipledevices'\"}}}" \
--hub-name <hub-name>
Você pode verificar o resultado da execução do script nos dispositivos usando o exemplo a seguir. Verifique o resultCode: 0 que indica que o comando foi bem-sucedido e textResult que mostra a saída do script executado.
az iot hub query -q \
"SELECT deviceId, properties.reported.CommandRunner.commandStatus.resultCode,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE moduleId='osconfig' AND properties.reported.CommandRunner.commandStatus.commandId = 'runcustomscript_multipledevices'" \
--output table --hub-name <hub name>
Próximas etapas
Para obter uma visão geral dos cenários e funcionalidades do OSConfig, consulte: