Dit artikel is ontworpen ter ondersteuning van personen die apparaten inrichten of beheren met Azure IoT. Als dat niet lijkt op u, kunt u overwegen om doelgroepen te bekijken voor OSConfig-documentatie.
Met de functie CommandRunner -->RunCommand kunt u wat eenvoud wegruilen om flexibiliteit te verkrijgen. Wanneer dat nodig is, kunt u een abstractieniveau omlaag zetten om aangepaste rapportage en configuratie uit te voeren.
Veelvoorkomende voorbeelden van aangepaste rapportage en configuratie
Apparaatconnectiviteit met sleuteleindpunten controleren
Controleer of specifieke daemons worden uitgevoerd
Fouten opsporen of problemen met apparaten oplossen, bijvoorbeeld door logboekbestanden te verzamelen en te uploaden naar cloudopslag
Configureer alle apparaten voor het gebruik van de gewenste tijdzone bij het vastleggen van gegevens, het genereren van tijdstempels, enzovoort.
Rapporteren over (of configureren) uw eigen unieke apparaatonderdelen waarvan OSConfig anders nooit op de hoogte zou zijn
De mogelijkheden zijn eindeloos, bijna elke taak die u in een shell voor één apparaat kunt uitvoeren. U kunt dit doen met Azure IoT en OSConfig CommandRunner voor fleets of devices
Deze voorbeelden kunnen dienen als uitgangspunt om u aan te passen aan uw unieke omgeving.
Elk voorbeeld bevat stappen en schermopnamen voor het werken in de Azure Portal en voor het werken in bash met Azure CLI.
Elk voorbeeld bevat ook variaties voor één apparaat (bijvoorbeeld een scenario voor probleemoplossing) of voor veel apparaten (bijvoorbeeld een configuratie-inrichtings- of rapportagescenario).
Wat u kunt verwachten:
In de instructies voor één apparaat leest en schrijft u gerapporteerde en gewenste eigenschappen rechtstreeks in de OSConfig-dubbel voor een apparaat. In de instructies op schaal gebruikt u IoT Hub Configuraties (ook wel Bekend als Automatisch Apparaatbeheer of ADM) om gewenste eigenschappen naar veel tweelingen te pushen en IoT Hub Query's (onafhankelijk of gekoppeld aan configuraties als metrische gegevens) te gebruiken om de resultaten van apparaten te bekijken.
Vereisten voor de volgende voorbeelden
Als u dit artikel ter referentie gebruikt (u bent bijvoorbeeld hier om een eigenschapsnaam te kopiëren), zijn er geen vereisten.
Als u de voorbeelden op live systemen wilt proberen (aanbevolen), dan:
U hebt een Azure-account met een IoT Hub
In dit artikel wordt ervan uitgegaan dat u bekend bent met IoT Hub en gerelateerde hulpprogramma's. Er wordt bijvoorbeeld van uitgegaan dat u vertrouwd bent met het maken van IoT Hubs en het koppelen van apparaten. Als u liever een meer beschrijvende stapsgewijze inleiding tot het installeren en gebruiken van OSConfig helemaal zelf wilt gebruiken, raadpleegt u: Quickstart: Een enkel virtueel IoT-apparaat beheren met behulp van Azure CLI .
U hebt ten minste één Linux-apparaat nodig waarop de OSConfig-agent is geïnstalleerd en verbonden met Azure IoT.
Zorg ervoor dat u bent aangemeld bij Azure Portal en toegang hebt tot de overzichtspagina van uw IoT Hub
Meld u aan bij Azure Portal met het account dat u wilt gebruiken
Azure Cloud Shell starten in de bash-modus
(optioneel) Gebruik de opdracht az account show om ervoor te zorgen dat u bent aangemeld bij de context die u wilt gebruiken voor de voorbeelden.
Tip
Er zijn twee dingen die u moet weten over CommandRunner-gedrag om succesvol te zijn met behulp van deze voorbeelden:
Zoals in de voorbeelden is gedemonstreerd, moet elke nieuwe aanvraag een nieuwe waarde bevatten voor commandId (dit kan elke tekenreeks zijn, bijvoorbeeld 'MyCmd01', 'MyCmd02').
Het proces is asynchroon, zodat de resultaten niet onmiddellijk beschikbaar zijn. De eenvoudigste procedure is om ongeveer één minuut te wachten nadat u een CommandRunner-aanvraag hebt gestart. Na die minuut, zonder extra stappen van uw kant, zijn de resultaten beschikbaar in properties.reported.CommandRunner.commandStatus. Zie voor meer informatie over vernieuwingsgedrag, asynchrone statusupdates, enzovoort: Werken met de CommandRunner-functie van OSConfig en Azure IoT.
Voorbeeld 1. Apparaatconnectiviteit met specifieke eindpunten controleren
In dit voorbeeld vragen we de apparaten om www.github.com drie keer te pingen. We bekijken de afsluitcode van ping (geslaagd of mislukt) en we kunnen de tekstuele uitvoer van de ping-opdracht observeren.
Navigeer vanaf de portalpagina van uw IoT Hub naar de OSConfig-moduledubbel voor het apparaat dat u wilt beheren. Voeg vervolgens het volgende toe aan de properties.desired sectie (gevolgd door een komma om deze te scheiden van het volgende item in properties.desired).
U kunt de connectiviteit van het apparaat controleren door het antwoord op de pingopdracht van de OSConfig-moduledubbel zelf te controleren. Schuif omlaag in de moduledubbel om gerapporteerde eigenschappen voor CommandRunner te zoeken. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult die de uitvoer van de ping-opdracht weergeeft.
Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Configurations -->Moduleconfiguratie toevoegen.
Geef een naam op en stel de Twin-instellingen in met de gewenste configuratie van Package Manager. Stel de eigenschap properties.desired.CommandRunnerModuledubbel in op en stel de eigenschapsinhoud van de moduledubbel in op het volgende:
Maak een aangepaste metrische waarde met de naam geslaagde namen en de metrische criteria , zoals hieronder wordt weergegeven. Met deze metrische query worden alle apparaten geïdentificeerd die het eindpunt hebben gepinged.
SELECT deviceId FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.resultCode = 0
AND properties.reported.CommandRunner.commandStatus.commandId = 'pingcmd'
Geef voor de doelmodules de criteria op waarvoor apparaten binnen het bereik vallen. In dit voorbeeld richten we ons op alle osconfig-apparaten door een doelvoorwaarde op te geven van FROM devices.modules where moduleId='osconfig'
Als u wilt zien welke dubbels van apparaten zijn bijgewerkt met de inhoud van de gewenste tweelingeigenschap (aan de cloudzijde), raadpleegt u de toegepaste metrische waarde (ook wel appliedCount genoemd)
Als u wilt zien welke apparaten het eindpunt hebben gep pingt, raadpleegt u de aangepaste metrische gegevens voor geslaagde geslaagde verbindingen die hierboven zijn gemaakt.
U kunt ook de uitvoer controleren van de pingopdracht die in dit voorbeeld wordt gebruikt met behulp van de volgende query. Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Query's in de navigatiebalk aan de linkerkant.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'pingcmd'
Gebruik de volgende voorbeeldopdracht om de OSConfig-dubbel van één apparaat in te stellen, waarbij u <de apparaat-id> en/of <hubnaam> vervangt zodat deze overeenkomt met uw omgeving.
U kunt de apparaatconnectiviteit controleren door het antwoord op de pingopdracht te controleren. Gebruik de volgende voorbeeldopdracht waarmee het resultaat van de pingopdracht wordt verkregen, waarbij <de apparaat-id> en/of <hubnaam> worden vervangen zodat deze overeenkomt met uw omgeving. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult die de uitvoer van de ping-opdracht weergeeft.
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
Gebruik de volgende voorbeeldopdracht om een IoT Hub-configuratie te maken om de netwerkverbinding te controleren op een reeks apparaten die zijn verbonden met een IoT Hub. Deze configuratie omvat doelcriteria, aangepaste metrische gegevens en de gewenste configuratie. Zorg ervoor dat u de naam van de <hub> vervangt door uw IoT Hub naam.
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>
Als u wilt zien welke dubbels van apparaten zijn bijgewerkt met de inhoud van de gewenste dubbeleigenschap (cloudzijde), raadpleegt u de toegepaste metrische waarde (ook wel appliedCount genoemd). Als u wilt zien welke apparaten het eindpunt hebben gep pingt, raadpleegt u de aangepaste metrische gegevens voor geslaagde geslaagde verbindingen die hierboven zijn gemaakt.
Gebruik de volgende opdrachten om te controleren op zowel toegepaste als aangepaste metrische gegevens.
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
Met behulp van de volgende opdracht kunt u de resultaten van de ping-opdracht voor elk apparaat controleren om te zien of het is gelukt of niet. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult die de uitvoer van de ping-opdracht weergeeft.
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
U kunt ook de uitvoer controleren van de pingopdracht die in dit voorbeeld wordt gebruikt met behulp van de volgende query. Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Query's in de navigatiebalk aan de linkerkant. textResult uit de uitvoer toont de gewenste bestandsinhoud.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'checkconnectivity_devicefleet'
Voorbeeld 2. Inhoud van /etc/ssh/sshd_config ophalen
In dit voorbeeld gebruiken we CommandRunner om de inhoud van een bestand van elk apparaat vast te leggen. In dit voorbeeld uploaden we het bestand niet expliciet naar een cloudopslagservice, maar leggen we gewoon de inhoud ervan vast in de dubbel.
Belangrijk
Updates van eigenschappen van dubbels zijn beperkt tot 4 kB. De methode die hier wordt weergegeven, legt de bestandsinhoud (van cat) inline vast in de dubbel. Voor zeer kleine bestanden heeft deze methode het voordeel dat er geen externe opslagservices of referenties nodig zijn. Voor grotere bestanden is deze methode niet van toepassing. In plaats daarvan zou u logica opnemen in uw script/opdracht om het bestand naar on-premises of cloudopslag van uw keuze te uploaden. U kunt bijvoorbeeld verbinding maken met een cifs-share en het bestand daar kopiëren of de bestandsinhoud naar Azure Storage pushen.
Ga op de portalpagina van uw IoT Hub naar de OSConfig-dubbel voor het apparaat dat u wilt beheren. Voeg vervolgens het volgende toe aan de properties.desired sectie (gevolgd door een komma om deze te scheiden van het volgende item in properties.desired). U kunt de bestandsnaam van uw keuze vervangen in het onderstaande argumentenveld .
U kunt de bestandsinhoud van de moduledubbel zelf zien. Schuif omlaag in de moduledubbel om commandStatus te vinden onder gerapporteerde eigenschappen voor CommandRunner. Hier ziet u dit in de textResult. Controleer op resultCode: 0 , waarmee wordt aangegeven dat de opdracht is geslaagd en textResult waarmee de gewenste bestandsinhoud wordt weergegeven.
Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Configuraties -->Moduleconfiguratie toevoegen.
Geef een naam op en stel de Twin-instellingen in met de gewenste configuratie van package manager. Stel de eigenschap Moduledubbel in op properties.desired.CommandRunner en stel de eigenschap Inhoud van de moduledubbel in op het volgende:
Geef voor de doelmodules de criteria op waarvoor apparaten binnen het bereik vallen. In dit voorbeeld richten we ons op alle osConfig-apparaten door een doelvoorwaarde op te geven van FROM devices.modules where moduleId='osconfig'
Als u wilt zien welke dubbels van apparaten zijn bijgewerkt met de inhoud van de gewenste dubbeleigenschap (cloudzijde), raadpleegt u de toegepaste metrische waarde (ook wel toegepastCount genoemd)
U kunt ook de bestandsinhoud in dit voorbeeld lezen met behulp van de volgende query. Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Query's in de linkernavigatiebalk. De inhoud van het bestand kan worden weergegeven in commandStatus.textResult.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'sshdconfigfile_contents'
Gebruik de volgende voorbeeldopdracht om een aanvraag te initiëren (door uw aanvraag in de properties.desired sectie van de tweeling te plaatsen).
Gebruik de volgende opdracht om de resultaten te bekijken. Controleer op resultCode: 0 , waarmee wordt aangegeven dat de opdracht is geslaagd en textResult waarmee de gewenste bestandsinhoud wordt weergegeven.
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>
Gebruik de volgende voorbeeldopdracht om een IoT Hub Configuratie te maken. Deze configuratie omvat doelcriteria, de gewenste configuratie. Zorg ervoor dat u de naam van de hub vervangt door uw IoT Hub naam.
Gebruik de volgende opdracht om de resultaten te bekijken. Controleer op resultCode: 0 , waarmee wordt aangegeven dat de opdracht is geslaagd en textResult waarin de bestandsinhoud wordt weergegeven.
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>
Als u wilt zien welke dubbels van apparaten zijn bijgewerkt met de inhoud van de gewenste dubbeleigenschap (cloudzijde), raadpleegt u de toegepaste metrische waarde (ook wel appliedCount genoemd).
Gebruik de volgende opdracht om te controleren op de toegepaste metrische waarde.
az iot hub configuration show-metric --metric-id appliedCount \
-c "sshdconfigfile_contents" \
-n <hub name> --metric-type system
U kunt de bestandsinhoud ook lezen met behulp van de volgende query. Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Query's in de linkernavigatiebalk.
SELECT deviceId, properties.reported.CommandRunner.commandStatus,
properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'sshdconfigfile_contents'
Voorbeeld 3. Een eenvoudig inlinescript implementeren om de tijdzone in te stellen op UTC en rapporteren over tijdzone
In dit voorbeeld ziet u een eenvoudige use-case waarbij zowel het script als de resultaten inline kunnen worden verwerkt als onderdeel van de dubbel. In het voorbeeld wordt de tijdzone ingesteld op UTC en wordt vervolgens een query uitgevoerd op de tijdzone zodra deze is ingesteld.
Navigeer vanaf de portalpagina van uw IoT Hub naar de OSConfig-dubbel voor het apparaat dat u wilt beheren en voeg het volgende toe aan de properties.desired sectie, gevolgd door een komma om deze te scheiden van het volgende item in properties.desired. action=3 hieronder geeft de actie RunCommand op.
Zodra de opdracht is uitgevoerd, schuift u omlaag naar de moduledubbel om commandStatus te vinden onder gerapporteerde eigenschappen voor CommandRunner. Hier ziet u de tekstResult de huidige tijdzone die is ingesteld op het apparaat.
Als u de tijdzone voor een vloot apparaten wilt instellen of bijwerken naar UTC, zoals in dit voorbeeld, maakt u een IoT Hub-configuratie (ook wel bekend als IoT Hub Automatic Apparaatbeheer [ADM]).
Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Configuraties -->Moduleconfiguratie toevoegen.
Geef een naam op en stel de Twin-instellingen in met de gewenste configuratie van package manager. Stel de eigenschap Moduledubbel in op properties.desired.CommandRunner en stel de eigenschap Inhoud van de moduledubbel in op het volgende:
Geef voor de doelmodules de criteria op waarvoor apparaten binnen het bereik vallen. In dit voorbeeld richten we ons op alle osConfig-apparaten door een doelvoorwaarde op te geven van FROM devices.modules where moduleId='osconfig'
Maak een aangepaste metrische waardemet de naam geconfigureerd en de criteria voor metrische gegevens , zoals hieronder wordt weergegeven. Met deze metrische query worden alle apparaten geïdentificeerd die de tijdzone hebben bijgewerkt.
SELECT deviceId FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.resultCode = 0
AND properties.reported.CommandRunner.commandStatus.commandId = 'settimezone_config'
Zodra de configuratie is toegepast op de apparaten, kunt u controleren welke dubbels van apparaten zijn bijgewerkt met de inhoud van de gewenste dubbeleigenschap (cloud), door te controleren op de toegepaste metrische waarde (ook wel toegepastCount genoemd). Als u wilt zien welke apparaten de tijdzone hebben bijgewerkt, raadpleegt u de aangepaste metrische gegevens die hierboven zijn gemaakt.
U kunt in dit voorbeeld ook de huidige tijdzone op deze apparaten lezen met behulp van de volgende query. Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Query's in de linkernavigatiebalk. U kunt de huidige tijdzone op deze apparaten controleren via commandStatus.textResult.
SELECT deviceId, properties.reported.CommandRunner.commandStatus
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'settimezone_config'
Gebruik het volgende voorbeeld om de tijdzone op het apparaat in te stellen en vervolgens de huidige tijdzone te lezen. action=3 hieronder geeft de actie RunCommand op. vervang <de apparaat-id> en/of <hubnaam> zodat deze overeenkomt met uw omgeving.
U kunt een query uitvoeren op het resultaat van de bovenstaande opdracht en de huidige tijdzone op het apparaat controleren met behulp van het volgende voorbeeld. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult de huidige tijdzone weergeeft.
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
Gebruik de volgende voorbeeldopdracht om een IoT Hub Configuratie te maken. Deze configuratie omvat doelcriteria, de gewenste configuratie. Zorg ervoor dat u de naam van de hub vervangt door uw IoT Hub naam.
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>
U kunt een query uitvoeren op de tijdzone op de apparaten met behulp van het volgende voorbeeld. De huidige tijdzone kan worden weergegeven in 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>
Als u wilt zien welke dubbels van apparaten zijn bijgewerkt met de inhoud van de gewenste dubbeleigenschap (cloudzijde), raadpleegt u de toegepaste metrische waarde (ook wel appliedCount genoemd). Als u wilt zien welke apparaten het eindpunt hebben gepingt, raadpleegt u de aangepaste metrische gegevens die hierboven zijn gemaakt.
Gebruik de volgende opdrachten om te controleren op beide metrische gegevens.
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
Voorbeeld 4. Een aangepast rapportagescript implementeren vanuit een onlineopslagplaats
In dit voorbeeld ziet u hoe u een script aanroept dat zich buiten de tweeling bevindt. U kunt bijvoorbeeld uw scripts in GitHub plaatsen. Dit patroon kan uit noodzaak ontstaan (script is te groot voor dubbel) of uit voorkeur. De opdracht in de dubbel is een eenvoudige wrapper. Het hoofdscript wordt gedownload en uitgevoerd.
Belangrijk
Ter ondersteuning van dit document hebben we een voorbeeldscript gepubliceerd. Dit voorbeeldscript wordt geleverd als een stand-in voor uw eigen script in GitHub of ergens anders. Er worden enkele gegevenspunten verzameld van het apparaat, waaronder een tijdstempel, daemonstatus en vrije schijfruimte. Controleer scripts van internet, inclusief deze, voordat u ze op uw apparaten uitvoert.
Navigeer vanaf de portalpagina van uw IoT Hub naar de OSConfig-dubbel voor het apparaat dat u wilt beheren en voeg het volgende toe aan de properties.desired sectie, gevolgd door een komma om deze te scheiden van het volgende item inproperties.desired.
Schuif omlaag in de moduledubbel om CommandRunner -->commandStatus te vinden in de sectie gerapporteerde eigenschappen van de dubbel. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult met de uitvoer van het script dat is uitgevoerd. Hier volgt een voorbeeld van uitvoer van de OSConfig-dubbel van een apparaat:
Als u een app wilt downloaden en installeren of een script wilt uitvoeren op een reeks apparaten, zoals in dit voorbeeld, maakt u een IoT Hub-configuratie (ook wel bekend als IoT Hub Automatic Apparaatbeheer [ADM]).
Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Configurations -->Moduleconfiguratie toevoegen.
Geef een naam op en stel de Twin-instellingen in met de gewenste configuratie van Package Manager. Stel moduledubbeleigenschap in op de eigenschap properties.desired.CommandRunnerInhoud van moduledubbel en stel deze in op het volgende.
Geef voor de doelmodules de criteria op waarvoor apparaten binnen het bereik vallen. In dit voorbeeld richten we ons op alle osconfig-apparaten door een doelvoorwaarde op te geven van FROM devices.modules where moduleId='osconfig'
Maak een aangepaste metriek met de naam die is uitgevoerd en de metrische criteria , zoals hieronder wordt weergegeven. Met deze metrische query worden alle apparaten geïdentificeerd waarop het script is uitgevoerd of uitgevoerd.
SELECT deviceId
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.resultCode = 0
AND properties.reported.CommandRunner.commandStatus.commandId = 'runcustomscript_configuration'
Zodra de configuratie is toegepast op de apparaten, kunt u controleren welke tweelingen van apparaten zijn bijgewerkt met de gewenste inhoud van de tweelingeigenschap (cloudzijde), door te controleren op de toegepaste metrische waarde (ook wel toegepastecount genoemd). Als u wilt zien welke apparaten de tijdzone hebben bijgewerkt, raadpleegt u de aangepaste metrische gegevens die hierboven zijn gemaakt.
U kunt ook controleren of de bovenstaande configuratie is toegepast en of de installatie is geslaagd met behulp van de volgende query. Kies op de portalpagina van uw Azure IoT Hub apparaatbeheer -->Query's in de navigatiebalk aan de linkerkant. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult die de uitvoer van het script weergeeft.
SELECT deviceId, properties.reported.CommandRunner.commandStatus.textResult
FROM devices.modules
WHERE properties.reported.CommandRunner.commandStatus.commandId = 'runcustomscript_configuration'
In het volgende voorbeeld ziet u het downloaden en uitvoeren van een eenvoudig script op een specifiek apparaat. vervang <de apparaat-id> en/of <hubnaam> zodat deze overeenkomt met uw omgeving.
U kunt het resultaat van het bovenstaande script op het apparaat opvragen met behulp van het volgende voorbeeld. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult die de uitvoer van het script weergeeft.
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
Gebruik de volgende voorbeeldopdracht om een IoT Hub Configuratie te maken om een aangepast script op meerdere apparaten te downloaden en uit te voeren. Deze configuratie omvat doelcriteria en de gewenste configuratie. Zorg ervoor dat u de naam van de hub vervangt door uw IoT Hub naam.
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>
U kunt het resultaat van de uitvoering van het script op de apparaten controleren met behulp van het volgende voorbeeld. Controleer op resultCode: 0 , wat aangeeft dat de opdracht is geslaagd en textResult die de uitvoer van het uitgevoerde script weergeeft.
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>
Volgende stappen
Zie voor een overzicht van OSConfig-scenario's en -mogelijkheden: