WQL nicht unterstützt TOP - brauchen workaround
WQL (im Grunde SQL for WMI) nicht unterstützt, ein TOP oder LIMIT Schlüsselwort. Sql Server verwendet TOP-und vielen anderen RDBMS supprt LIMIT etc.
Gibt es einen workaround, um die Emulation einer SELECT-Abfrage zu Verhalten, als hätte es einen TOP/LIMIT-Klausel, die schränkt die Ergebnismenge auf einige willkürliche Zahl?
Oder gibt es eine andere WQL-keyword, das funktioniert wie TOP oder LIMIT???
- Wie werden Sie beabsichtigen zu verwenden SPITZE? Meistens ist es eine Frage der Verwendung von MIN - /MAX-Wert-Vergleiche...
- Willkürlich. Für den sake des Beispiels, sagen, es gibt eine datetime-Spalte und Sie sehen wollen, die letzten 10 Ereignisse. Gibt es einen Weg, um MIN/MAX zu emulieren TOP?
- MAX & rank/rownum...
Du musst angemeldet sein, um einen Kommentar abzugeben.
NÖ, es gibt keine Möglichkeit, zu simulieren, OBEN mit WQL allein.
Ausnahme: wenn Sie Glück genug, um der Abfrage eine WMI-Klasse, die hat ungapped, aufsteigender numerischer Instanz zahlen als Schlüssel verwendet, dann Sie können verwenden Sie das größer-als und kleiner-dann Vergleiche zu begrenzen und durch die Seite Ergebnisse.
Ist es möglich, dass ManagementClass.GetInstances() statt mit einer WQL-Abfrage, vielleicht erlauben Sie zum Abbrechen der Aufzählung midway sobald Sie gesammelt haben genug Instanzen, und damit vermeiden Sie die Zahlung der CPU und RAM Kosten aufzulisten, die ganze Liste auf einmal.
Beachten Sie, dass, AFAIK, die CIMV2 WMI-Anbieter nicht nativ verarbeiten WQL-anstatt es einfach basiert auf WMI, um alle aufzuzählen, Instanzen, Prozess der WQL -, und filtern Sie die Ergebnisse vor der Rückgabe an den Aufrufer. Aber das teure Teil (eigentlich das abrufen der zugrunde liegenden WMI-Daten) noch tun. Also ich glaube, es gibt keinen Effizienzgewinn zu haben (für lokale WMI-Abfragen, das ist) mithilfe von WQL-vs. mit GetInstances() und die Ergebnisse filtern, die sich selbst-und wenn GetInstances() können Sie Abbrechen, midway, dann GetInstances() kann viel billiger sein, für lange Ergebnis-sets.
Rohr mit "select xyz -die Erste 1"
zB: Get-WmiObject win32_logicaldisk |select -First 1
Select-Object -First 10
würde der Ausgang 1 Objekt pro Sekunde für die ersten 10 Sekunden und dann auf den Befehl durchführen würde noch 990 Sekunden mit absolut kein feedback an den Benutzer zu löschen!Wie Justin gesagt hat. Ich bin mir nicht sicher über Ihre genaue Anforderung wenn. Ich war dabei ein einfaches Projekt mit Visual Basic und ein Teil davon zu Holen Ereignis log, die listview nicht die immense Größe der Applikation log(>20 MB), und die Steuerung tritt in eine Art Endlosschleife. Ich wollte zu begrenzen, also hier ist der pseudocode