Powershell函数名称为"主要"奇怪效应

Bac*_*ave 5 powershell

看看这段代码:

main

function main
{
    cls
    Write-Host "hi"
}
Run Code Online (Sandbox Code Playgroud)

如果您是第一次运行它,将加载Windows鼠标属性窗口.

再次运行它会显示"hi".

为什么是这样?

我知道main.cpl是Mouse Properties窗口.但是为什么它只是第一次打开,然后第二次Powershell意识到你实际上想要调用"主要"功能.

如果你想要鼠标属性窗口,Powershell不应该检测到这个并要求你编写main.cpl吗?

Lar*_*ens 6

因为在第一次调用main时,没有函数main,所以PowerShell正在寻找另一个名为main的东西来执行.第二次它知道main函数,并且优先于main.cpl.

解决方案很简单.在第一次调用之前声明main函数.

function main
{
    cls
    Write-Host "hi"
}

main
Run Code Online (Sandbox Code Playgroud)

我没有回答为什么PowerShell决定在键入main时执行main.cpl,但是如果你在$ env:path中有它,那么main.exe也是如此.