Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
WDTF bevat een eenvoudige querytaal om de taak van het verzamelen van doelen te vereenvoudigen op basis van kenmerken of relaties. De Simple Data Evaluation Language (SDEL) is vergelijkbaar met XPath. Zie XPath-naslaginformatie voor meer informatie over XPath.
In de volgende secties in dit onderwerp wordt beschreven hoe u SDEL kunt gebruiken.
Notitie
Zie Voor een volledige lijst met alle naamruimtetokens en de kenmerktokens hierin apparaatrelatietokens in SDEL en kenmerktokens in SDEL.
Basisbeginselen van SDEL-syntaxis
SDEL gebruikt kenmerktokens om overeenkomsten uit te voeren en gegevens op te halen. Alle SDEL-tokens kunnen alleen alfanumerieke tekens en afbreekstreepjes (-) bevatten.
Een kenmerk verwijst naar een stukje gegevens dat is gekoppeld aan een doel. Werkelijke waarden in het kenmerk worden opgeslagen als variant. Als u een vergelijkingsoperator plaatst, gevolgd door een testwaarde na het kenmerk, voert SDEL een vergelijkingsmatch uit. U moet testwaarden tussen enkele of dubbele aanhalingstekens plaatsen. Met deze notatie kunt u werkelijke enkele of dubbele aanhalingstekens gebruiken in de testwaarde, maar niet beide. Als de testwaarde uit alleen alfanumerieke tekens en afbreekstreepjes (-) bestaat, kunt u de aanhalingstekens weglaten.
Vergelijkingsbewerkingen
Met SDEL kunnen verschillende vergelijkingsoperatoren een kenmerktoken volgen. Op het moment van een vergelijking wordt de werkelijke waarde in het kenmerk links van de operator gemaakt om hetzelfde type van de testwaarde rechts van de operator te zijn via de methode VariantChangeType (die wordt beschreven in de Microsoft Windows SDK-documentatie). In de volgende tabel ziet u de verschillende vergelijkingsoperatoren die door SDEL worden ondersteund.
Vergelijkingsoperator Betekenis van gelijkheid (=)
Nadat de typen zijn gewijzigd, worden ze vergeleken met behulp van de VarCmp-methode (die wordt beschreven in de Windows SDK-documentatie).
Ongelijkheid (!=)
Kleiner dan (<)
Kleiner dan of gelijk aan (<=)
Groter dan (>)
Groter dan of gelijk aan (>=)
Bitwise AND (&)
Deze operator dwingt types om naar VT_I8 voordat hij een bitwise AND uitvoert op de werkelijke en testwaarden.
Geen vergelijkingsbewerking (en geen waarde) opgegeven
Als de werkelijke waarde in het kenmerk van het type VT_BOOL is, wordt aan de overeenkomst voldaan op basis van die waarde. Dat wil gezegd, u hebt geen vergelijkingsoperator nodig om 'IsDisable=True' uit te voeren. Anders, als er enige waarde is (anders dan VT_EMPTY), wordt aan de overeenkomst voldaan.
Wanneer er meer dan één werkelijke waarde (of een matrix) in het kenmerk is, moeten alle vergelijkingsoperatoren worden geïnterpreteerd zodat deze overeenkomen met ten minste één, behalve de ongelijkheidsoperator, die het tegenovergestelde gedrag heeft. Als de typen helemaal niet kunnen worden vergeleken (dat wil gezegd , VariantChangeType mislukt), is er geen overeenkomst (met uitzondering van de ongelijkheidsoperator, die het tegenovergestelde gedrag heeft).
Informatie over kenmerknaamruimten
SDEL gebruikt naamruimtetokens om kenmerken te groeperen. Zie Kenmerktokens in SDEL voor een volledige lijst met alle naamruimtetokens en de kenmerktokens erin.
Als u een kenmerk wilt gebruiken dat zich buiten de hoofdnaamruimte bevindt, moet u het kenmerk vooraf laten gaan door de naamruimtenaam en vervolgens twee dubbele punten (::)). In het volgende VBScript-codevoorbeeld wordt de waarde van het kenmerk Disk::IsRemovable weergegeven.
WScript.Echo "Is Removable?: " & DeviceObj.GetValue("Disk::IsRemovable")
Een doel onderzoeken met Behulp van GetValue en Eval
Met de methode IWDTFTarget2::GetValue kunt u een doel over de kenmerken ervan vragen. In het volgende VBScript-codevoorbeeld wordt de waarde van het kenmerk FriendlyName voor een doel afgedrukt.
WScript.Echo "FriendlyName: " & Device.GetValue("FriendlyName")
Zie Kenmerktokens in SDEL voor een volledige lijst met kenmerktokens.
U kunt ook de methode IWDTFTarget2::Eval gebruiken om een SDEL-instructie te evalueren op basis van een doel. Eval retourneert VARIANT_TRUE of VARIANT_FALSE. In het volgende VBScript-codevoorbeeld wordt Eval gebruikt om te bepalen of een apparaat kan worden uitgeschakeld.
If Device.Eval("IsDisableable=true") Then
WScript.Echo "Target is disableable!"
End If
U kunt Eval ook gebruiken om te testen op de aanwezigheid van een kenmerk. Wanneer u een kenmerk doorgeeft, maar geen vergelijkingsoperator of -waarde, retourneert EvalVARIANT_TRUE als het kenmerk of de naamruimte een waarde bevat (anders dan VT_EMPTY). In het volgende VBScript-codevoorbeeld wordt Eval gebruikt om te bepalen of het doel een SymbolLink-trefwoord heeft.
If Device.Eval("SymbolicLink") Then
WScript.Echo "Target has a SymbolicLink!"
End If
Kenmerken die geen vergelijkingsoperator hebben, maar wel een VT_BOOL-waarde, krijgen automatisch een '=true'-vergelijking toegepast. Deze impliciete vergelijking betekent dat 'IsDisableable' gelijk is aan 'IsDisable='true'.
Navigeren in relaties
Bij het testen wordt vaak onderzocht wat er gebeurt wanneer de status van gerelateerde apparaten verandert. Wanneer een USB-hub bijvoorbeeld is uitgeschakeld, worden de apparaten die eraan zijn gekoppeld, de statuswijziging correct verwerkt? Daarnaast kunt u een apparaat zoeken op basis van informatie op gerelateerde apparaten. Ter ondersteuning van deze functionaliteit bevat SDEL een manier om een of meer logische relaties op te geven vóór een kenmerk of naamruimte (maar niet na een van beide). Relationele tokens worden gescheiden van het kenmerk of de naamruimte door een slash (/). In het volgende VBScript-codevoorbeeld wordt de waarde van het kenmerk FriendlyName voor het bovenliggende apparaat van een doel afgedrukt.
WScript.Echo "FriendlyName: " & Device.GetValue("parent/FriendlyName")
U kunt ook relationele modifiers combineren. In het volgende VBScript-codevoorbeeld wordt de waarde van het kenmerk FriendlyName van het grootouderapparaat van het doelobject afgedrukt.
WScript.Echo "FriendlyName: " & Device.GetValue("parent/parent/FriendlyName")
Soms hebben apparaten veel-op-veel-relaties. Een logisch opslagvolume kan zich bijvoorbeeld op veel fysieke schijven bevinden en die afzonderlijke schijven kunnen ruimte bijdragen aan veel volumes.
Binnen WDTF zijn alle niet-fantoomapparaten (dat wil gezegd fysiek aanwezige apparaten) afstammelingen van het hoofdapparaat (die u kunt ophalen uit de eigenschap RootDevice ). (Zie WDTF-scenario's maken voor meer informatie over fantoomapparaten.)
Doelen verzamelen met GetRelations
In de volgende afbeelding ziet u de methode IWDTFTarget2::GetRelations .
De methode IWDTFTarget2::GetRelations accepteert alleen het relationele specifiergedeelte van de syntaxis van de SDEL-instructie en retourneert een IWDTFTargets2-verzamelingsinterface die alle doelen bevat die voldoen aan de relatiecriteria. In het volgende VBScript-codevoorbeeld wordt een verzameling geretourneerd die het oorspronkelijke doel en alle bijbehorende broers en zussen bevat.
Set TestDevices = Device.GetRelations("parent/child/", "")
De tweede parameter voor GetRelations kan eventueel een instructie bevatten die moet worden doorgegeven aan de Eval-methode van elk doel dat voldoet aan de specifieke relatie. Als u bijvoorbeeld IsDisable=true toevoegt als de tweede parameter, retourneert het voorgaande codevoorbeeld alleen het apparaat en de bijbehorende broers en zussen die kunnen worden uitgeschakeld.
Als er geen overeenkomsten zijn, wordt een verzameling met nul items geretourneerd.
Doelen verzamelen met behulp van query
De interface IWDTFDeviceDepot2 bevat een querymethode . Deze methode gebruikt een SDEL-instructie die is ontworpen voor de methode IWDTFTarget2::Eval en retourneert een nieuw exemplaar van de verzamelingsinterface IWDTFTargets2 die een subset van de doelen bevat die voldoen aan de criteria van de query. In het volgende VOORBEELD van VBScript-code worden alle niet-fantoomapparaten opgesomd en wordt de beschrijvende naam voor elk apparaat weergegeven.
For Each Device In WDTF.DeviceDepot.Query("IsPhantom=false")
WScript.Echo Device.GetValue("FriendlyName")
Next
De geretourneerde verzameling heeft de methode IWDTFTargets2::Query , die een identieke implementatie heeft voor IWDTFDeviceDepot2::Query. IWDTFTargets2::Query retourneert een subset van doelen uit de oorspronkelijke verzameling die voldoet aan de SDEL-instructie.
Booleaanse logica in SDEL
De methode IWDTFTarget2::GetRelations kan alleen de Booleaanse OF-operator accepteren, maar uw aanroepen naar de IWDTFTargets2::Query, IWDTFTarget2::Eval en IWDTFTarget2::GetValue-methoden kunnen booleaanse AND - en OR-operators gebruiken. Voor de querymethode en de Eval-methode fungeren de operators als normale Booleaanse operatoren, waardoor het resultaat wordt geretourneerd zoals verwacht. Voor de GetValue-methode zal AND de waarden aan beide zijden samenstellen, terwijl OR alleen de eerste gevonden waarde retourneert, te beginnen met links.
Haakjes in SDEL
Alle SDEL-instructies kunnen haakjes gebruiken om de evaluatievolgorde voor Booleaanse logica op te geven. U kunt ook haakjes gebruiken om subelementen in een instructie onder een relatie of naamruimte te groeperen.
In het volgende voorbeeld van VBScript-code worden alle volumes en kinderen van een grootouderapparaat opgehaald.
Set Devices = Device.GetRelations("parent/parent/(child/ OR volume/)", "")
In het volgende VBScript-codevoorbeeld worden alle apparaten opgehaald die een kind hebben met verwisselbare media die groter zijn dan 1.000.000 bytes.
Set Devices = WDTF.DeviceDepot.Query("child/disk::(IsRemovable=true AND Size>1000000)")
SDEL-syntaxis parseren
Als u een SDEL-instructie met onjuiste syntaxis doorgeeft aan een van de methoden in WDTF, mislukt de methode en wordt gedetailleerde foutinformatie geretourneerd en wordt het probleem uitgelegd.
Notitie
Een verkeerd gespelde kenmerk, naamruimte of relatietoken veroorzaakt geen syntaxisfout, omdat SDEL is ontworpen om dynamisch te zijn op basis van het doel: SDEL-instructies moeten een query kunnen uitvoeren op het bestaan van een kenmerk in een dynamische veldset.