Hat jemand ein Beispiel, wie die TabExpansion2-Funktion in Windows PowerShell 3.0 überschrieben wird? Ich weiß, wie die alte TabExpansion-Funktion überschrieben wird, aber ich möchte eine Liste von Elementen für das IntelliSense in PowerShell ISE bereitstellen. Ich habe mir die Definition von TabExpansion2 angeschaut und es war nicht leicht zu verstehen, wie ich meinen eigenen Code in den Tab-Expansionsprozess eingebe.Beispiel zum Überschreiben von TabExpansion2 in Windows PowerShell 3.0
Antwort
Ich denke, dieses Beispiel sollte Ihnen einen guten Ausgangspunkt geben: Windows Powershell Cookbook: Sample implementation of TabExpansion2. Der Beispielcode zeigt, dass Sie Code sowohl vor als auch nach den Standardaufrufen [CommandCompletion]::CompleteInput
hinzufügen können.
Beispielsweise können Sie der $options
Hashtabelle namens CustomArgumentCompleters einen Eintrag hinzufügen, um benutzerdefinierte Vervollständigung für Befehlsargumente zu erhalten. Der Eintrag sollte eine Hashtabelle sein, deren Schlüssel Argumentnamen sind (z. B. "ComputerName" oder "Get-ChildItem: Filter"), und die Werte sind Arrays von Werten, die zur Vervollständigung dieses Parameters verwendet werden können. Powertheshell.com hat auch einen Artikel dazu: Dynamic Argument Completion. Sie können auch benutzerdefinierte Komplettierungen für native ausführbare Dateien mit der Option NativeArgumentCompleters angeben (wiederum sind Schlüssel Befehlsnamen und Werte sind Arrays mit möglichen Komplettierungen). Wenn Sie CompleteInput
zurückgegeben haben, können Sie das Ergebnis in $result
für weitere Analysen speichern. Das Ergebnis ist eine Instanz der Klasse CommandCompletion
. Wenn der Standard-Abschluss keine Übereinstimmungen gefunden haben, können Sie Ihre eigenen CompletionResult
Einträge in die Liste der Spiele hinzu:
$result.CompletionMatches.Add(
(New-Object Management.Automation.CompletionResult "my completion string"))
nicht Vergessen $result
aus der Funktion zurückzubringen, um tatsächlich die Vollendung geschieht.
Zum Schluss noch ein Hinweis zur Fehlerbehebung: Der Code, der TabCompletion2
aufruft, scheint alle konsolenbasierten Ausgaben zu unterdrücken (nicht überraschend). Wenn Sie also selbst Debugging-Meldungen schreiben möchten, können Sie sie in eine separate Textdatei schreiben . Zum Beispiel könnten Sie die End
Funktion in TabCopmletion2
ändern wie folgt aussehen:
$result = [System.Management.Automation.CommandCompletion]::CompleteInput(
$inputScript, $cursorColumn, $options)
$result | Get-Member | Add-Content "c:\TabCompletionLog.txt"
$result
Hier ist ein Beispiel für überschriebene TabExpansion2
- TabExpansion2.ps1 und mehrere in der Praxis Profile mit Beender dafür verwendet:
- Invoke-Build.ArgumentCompleters.ps1 Argument Beender für Invoke-Build
- Mdbc.ArgumentCompleters.ps1 Argu ment Beender für Mdbc
- ArgumentCompleters.ps1 Argument, Eingabe und Ergebnis Beender
Die Sehenswürdigkeiten:
- TabExpansion2.ps1 tut Mindest Arbeit beim Laden. Die potentiell teure Initialisierung wird einmal ausgeführt, wenn die Fertigstellung tatsächlich erfolgt.
- Überschrieben
TabExpansion2
bietet Erweiterungsmechanismus über einen oder mehrere Profile*ArgumentCompleters.ps1
im Pfad. Profile werden beim ersten Aufruf von einmal aufgerufenTabExpansion2
.Mehrere Profile können mit verschiedenen unabhängigen Modulen, Werkzeugen usw. geliefert werden und gleichzeitig verwendet werden. - Neben Standard benutzerdefinierten Argument Beender und nativer Argument Beender Diese benutzerdefinierten
TabExpansion2
unterstützt Ergebnis Prozessoren, die die Ergebnisse aus der Einbau-Abschluss und Eingabeprozessoren zwicken, die die Einbau-Abschluss kann abzufangen und ersetzen. - Es funktioniert in einigen Fällen um nur Lese-leere integrierte Ergebnisse.
- ArgumentCompleters.ps1 enthält ein Beispiel für einen Eingangsprozessor, der die eingebaute Vervollständigung von Typen und Namespaces durch eine alternative, nützlichere manchmal ersetzt.
- Ein weiterer completer bietet Fertigstellung in den Kommentaren: Hilfe-Tags (.Synopsis, .Beschreibung, etc.) und Abschluss der Kommentar gesetzt Code, warum nicht?
- 1. SOAP-Syntax in Powershell 3.0
- 2. Mit Invoke-webRequest in Powershell 3.0 laicht einen Windows-Sicherheits
- 3. MapDb 3.0 Pump Beispiel
- 4. Httponly Session-Cookie + Servlet 3.0 (zum Beispiel Glassfish v3)
- 5. Pfadtrennzeichen in Windows PowerShell ändern
- 6. PowerShell zum Festlegen von GPO
- 7. twitter bootstrap 3.0 typeahead ajax beispiel
- 8. Beispiel zum Ausführen einer WMI-Methode von Windows-Treiber
- 9. Was sind die besten Ressourcen zum Erlernen von Windows PowerShell?
- 10. Windows Form von Powershell Codierung
- 11. Windows Powershell-Befehlszeilenäquivalent von dd
- 12. Python 3.0 Windows/COM
- 13. Überschreiben Ressourcen in Windows 10
- 14. AWS - UserData wird nicht zum Beispiel von benutzerdefinierten Bild erstellt
- 15. PowerShell 3.0 Sharepoint-Skripts funktionieren nicht
- 16. Fifo-Datei Windows Beispiel
- 17. Powershell Tee-Objekt ohne Datei zu überschreiben
- 18. Beispiel zum Speichern von Audio von RemoteIO?
- 19. Arbeiten mit Windows-Ereignisprotokollen in PowerShell
- 20. Windows Terminal - Windows Form zum Einbetten cmd
- 21. Das einfachste Beispiel für das Überschreiben von Methoden mit Generics
- 22. Powershell - Windows-Updates installieren?
- 23. PowerShell-Skript zum Abrufen der Netzwerkkartengeschwindigkeit eines Windows-Computers
- 24. Verwenden von __new__ zum Überschreiben von __init__ in der Unterklasse
- 25. Verwenden von Moq zum Überschreiben virtueller Methoden in derselben Klasse
- 26. Zum Auschecken ohne Überschreiben von Daten
- 27. Fragen zum Beispiel "ActionBarCompat"
- 28. Aktualisieren von eingebetteten Daten, zum Beispiel sysdata.rda
- 29. Analysieren von Windows-Ereignisprotokolleinträgen mithilfe von PowerShell und regulären Ausdrücken
- 30. Beispiel-Java-Code zum Simulieren von Speichermangel
Ist das irgendwo formal dokumentiert? Wie sind diese Informationen ursprünglich herausgekommen? –
Leider habe ich keine offizielle Dokumentation gesehen, aber ich würde es gerne sehen, wenn es existiert. – Charlie