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