小编典典

从 Powershell ISE 中的另一个 PS1 脚本调用 PowerShell 脚本 PS1

all

我想在 Powershell ISE 中的第二个 myScript2.ps1 脚本中调用 myScript1.ps1 脚本。

MyScript2.ps1 中的以下代码在 Powershell 管理中运行良好,但在 PowerShell ISE 中无法运行:

#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1

从 PowerShell ISE 执行 MyScript2.ps1 时出现以下错误:

术语“.\myScript1.ps1”未被识别为
cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。


阅读 63

收藏
2022-07-07

共1个答案

小编典典

为了找到脚本的位置,Split-Path $MyInvocation.MyCommand.Path请使用(确保在脚本上下文中使用它)。

这个示例脚本可以说明您应该使用它而不是其他任何东西的原因。

## ScriptTest.ps1
Write-Host "InvocationName:" $MyInvocation.InvocationName
Write-Host "Path:" $MyInvocation.MyCommand.Path

以下是一些结果。

PS C:\Users\JasonAr> .\ScriptTest.ps1
调用名称:.\ScriptTest.ps1
路径:C:\Users\JasonAr\ScriptTest.ps1

PS C:\Users\JasonAr> 。.\ScriptTest.ps1
调用名称:。
路径:C:\Users\JasonAr\ScriptTest.ps1

PS C:\Users\JasonAr> & ".\ScriptTest.ps1"
调用名称:&
路径:C:\Users\JasonAr\ScriptTest.ps1

PowerShell 3.0 及更高版本中,您可以使用自动变量$PSScriptRoot

## ScriptTest.ps1
Write-Host "Script:" $PSCommandPath
Write-Host "Path:" $PSScriptRoot



PS C:\Users\jarcher> .\ScriptTest.ps1
脚本:C:\Users\jarcher\ScriptTest.ps1
路径:C:\Users\jarcher
2022-07-07