2014-02-26 9 views
5

überprüft diesen Code aus:Powershell Funktion Name als „main“ Strange Effect

main 

function main 
{ 
    cls 
    Write-Host "hi" 
} 

Wenn Sie es zum ersten Mal ausführen, werden die Fenster Fenster Eigenschaften von Maus laden.

Starten Sie es erneut und es wird "hi" angezeigt.

Warum ist das?

Ich verstehe, dass main.cpl ist die Maus Eigenschaften Fenster. Aber warum öffnet es nur das erste Mal, dann merkt Powershell zum zweiten Mal, dass Sie eigentlich die "Hauptfunktion" aufrufen wollen.

Sollte das Powershell das nicht erkennen und Sie bitten, stattdessen main.cpl zu schreiben, wenn Sie das Eigenschaftenfenster der Maus haben wollen?

Antwort

6

Da zu der Zeit main das erste Mal aufgerufen wird, gibt es keine Funktion main, also sucht PowerShell nach einer anderen Sache namens main, die ausgeführt werden soll. Das zweite Mal weiß es über die Hauptfunktion und das hat Vorrang vor main.cpl.

Die Lösung ist einfach. Deklarieren Sie die Hauptfunktion, bevor Sie sie das erste Mal aufrufen.

function main 
{ 
    cls 
    Write-Host "hi" 
} 

main 

Ich habe keine Antwort, warum Powershell main.cpl auszuführen entscheidet, wenn Sie Haupt-Typ, aber das gleiche gilt für main.exe, wenn Sie es in $ env: path.