我有以下目录树:
e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1
Run Code Online (Sandbox Code Playgroud)
现在我想调用一个名为"按任意键继续.ps1"的脚本,它位于"utils"文件夹中,来自我在"services"文件夹中的脚本.我怎么做?我无法弄清楚相对路径.
我试着这样做:
"$ '.\..\utils\Press any key to continue.ps1'"
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
当我运行$PSScriptRoot
它返回null
.我正在使用PS版本4.
$val = Join-Path -Path $PSScriptRoot WebPlatformInstaller_amd64_en-US.msi
Run Code Online (Sandbox Code Playgroud)
错误
Join-Path:无法将参数绑定到参数'Path',因为它是一个空字符串.
我所描述的调用脚本这里并举例在这里。它正在运行,我可以看到控制台的输出(hazaa和shazoo)。但是,尽管测试了以下两个版本,但其中声明的方法似乎并不存在。
Invoke-Expression -Command $target
$target | Invoke-Expression
Run Code Online (Sandbox Code Playgroud)
文件的内容是这样的。
Write-Host "Hazaa"
function TestPower { Write-Host "I got the power..." }
Write-Host "Shazoo"
Run Code Online (Sandbox Code Playgroud)
当我在控制台中执行相同的函数定义时,它就在那里,工作正常。我在手动执行或从其他文件调用时没有收到任何错误。也没有警告。
最奇怪的部分是在调用脚本中完成的函数定义(id 是调用执行的那个,而不是作为调用目标的那个)。