如何在Powershell/Powershell Core中从同一脚本中的另一个函数调用函数?

如何在Powershell/Powershell Core中从同一脚本中的另一个函数调用函数?,powershell,powershell-core,Powershell,Powershell Core,考虑示例脚本代码importer.ps1 #!/usr/bin/env pwsh New-Item -Path $profile -Force | Out-Null; function main { if (Test-AlreadyImported) { Write-Host "Already Imported."; } else { Add-Content $profile "#My Additions" | Out-Null;

考虑示例脚本代码
importer.ps1

#!/usr/bin/env pwsh

New-Item -Path $profile -Force | Out-Null;

function main {
    if (Test-AlreadyImported) {
        Write-Host "Already Imported.";
    }
    else {
        Add-Content $profile "#My Additions" | Out-Null;
        Add-Content $profile "`$env:PSModulePath = `$env:PSModulePath + `";$PSScriptRoot`";" | Out-Null;
        Write-Host "Import done.";   
    }
}

function Test-AlreadyImported {
    if (Get-Content $profile | Select-String -Quiet "#My Additions") {
        Write-Host "I am true";
        return $true;
    }
    else {
        Write-Host "I am false";
        return $false;
    }
}

main;
运行2次后的预期输出:

I am True.
Already Imported.
I am false
Import done.
运行2次后的实际输出:

I am True.
Already Imported.
I am false
Import done.
如果我将
Test alreadyiimported
函数导入Powershell并执行它,那么它将返回
false
。但在脚本中,它总是返回
true


我犯的概念错误是什么?

-Force
for
新项目
的意思是:创建项目,即使它已经存在(覆盖)。新创建的文件将为空,因此
Test-alreadyiimported
始终返回true

如果删除
-Force
参数,将返回预期输出

New-Item -Path $profile -ErrorAction SilentlyContinue | Out-Null;

function main {
    if (Test-AlreadyImported) {
        Write-Host "Already Imported.";
    }
    else {
        Add-Content $profile "#My Additions" | Out-Null;
        Add-Content $profile "`$env:PSModulePath = `$env:PSModulePath + `";$PSScriptRoot`";" | Out-Null;
        Write-Host "Import done.";   
    }
}

function Test-AlreadyImported {
    if (Get-Content $profile | Select-String -Quiet "#My Additions") {
        Write-Host "I am true";
        return $true;
    }
    else {
        Write-Host "I am false";
        return $false;
    }
}

main;

我会进行调试,并在开始时设置断点,这样我就可以一步一步地跟踪脚本中的每一行。这将有助于您了解发生了什么以及原因。