我希望在Powershell ISE内的第二个myScript2.ps1脚本中调用myScript1.ps1脚本 .
MyScript2.ps1中的以下代码在Powershell Administration中运行良好,但在PowerShell ISE中不起作用:
#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1
从PowerShell ISE执行MyScript2.ps1时出现以下错误:
术语“ . \ myScript1.ps1”未被识别为cmdlet,函数,脚本文件或可操作程序的名称 . 检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试 .
10 回答
你可能已经找到了它的答案,但这就是我的工作 .
我通常将此行放在安装脚本的开头:
然后我可以使用$ PSScriptRoot变量作为当前脚本(路径)的位置,如下例中的示例:
在您的情况下,您可以替换
开始进程...与...一致
Invoke-Expression $ PSScriptRoot \ ScriptName.ps1
您可以在Microsoft站点上阅读有关$ MYINVOCATION和$ PSScriptRoot自动变量的更多信息:https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_automatic_variables
要在调用者的同一文件夹(或子文件夹)中轻松执行脚本文件,您可以使用:
一线解决方案:
我从myScript2.ps1调用myScript1.ps1 .
假设两个脚本都在同一位置,首先使用以下命令获取脚本的位置:
然后,添加您想要调用的脚本名称,如下所示:
这应该工作 .
MyScript1.ps1的当前路径与myScript2.ps1不同 . 您可以获取MyScript2.ps1的文件夹路径并将其连接到MyScript1.ps1然后执行它 . 两个脚本必须位于同一位置 .
我有这个问题 . 我没有使用任何聪明的
$MyInvocation
东西来修复它 . 如果通过右键单击脚本文件并选择edit
打开ISE,然后从ISE中打开第二个脚本,只需使用普通的 .\script.ps1 语法即可从另一个脚本中调用另一个脚本 . 我的猜测是,ISE具有当前文件夹的概念并打开它,就像这样将当前文件夹设置为包含脚本的文件夹 . 当我在正常使用中从另一个脚本调用一个脚本时我只使用 .\script.ps1 ,IMO修改脚本是错误的,只是为了让它在ISE中正常工作......如何在脚本中运行PowerShell内置脚本?
你如何使用像这样的内置脚本
这些是由您的计算机运行,自动检查脚本的路径 .
同样,我只需将脚本名称放在脚本块中即可运行自定义脚本
继续执行powershell命令行并键入
这将返回每次打开应用程序时我们的PowerShell命令行将执行的文件的路径 .
它看起来像这样
转到Documents并查看您是否已有WindowsPowerShell目录 . 我没有,所以
我们现在已经创建了每次打开PowerShell应用程序时都会启动的脚本 .
我们这样做的原因是我们可以添加自己的文件夹来保存我们所有的自定义脚本 . 让我们创建该文件夹,并在Mac / Linux保存其脚本的目录之后将其命名为“Bin” .
现在我们希望每次打开应用程序时都将该目录添加到我们的
$env:path
变量中,然后返回WindowsPowerShell
目录并然后加上这个
现在shell将自动找到您的命令,只要您将脚本保存在“Bin”目录中即可 .
重新启动powershell,它应该是最先执行的脚本之一 .
重新加载后在命令行上运行此命令以查看路径变量中的新目录:
现在我们可以从命令行或从另一个脚本中调用我们的脚本,就像这样:
如您所见,我们必须使用
.ps1
扩展名调用它们,直到我们为它们创建别名 . 如果我们想得到幻想 .要查找脚本的位置,请使用
Split-Path $MyInvocation.MyCommand.Path
(确保在脚本上下文中使用此选项) .您可以使用此示例脚本说明您应该使用它而不是其他任何内容的原因 .
这是一些结果 .
在 PowerShell 3.0 及更高版本中,您可以使用自动变量
$PSScriptRoot
:这只是答案的附加信息,以便将参数传递到另一个文件
你期望争论的地方
PrintName.ps1
How to call the file
如果你不提供任何输入,它将默认为"Joe",这将作为参数传递到 PrintName.ps1 文件中的printName参数,这将打印出 "Joe" 字符串
我有类似的问题并以这种方式解决了 .
我的工作目录是一个通用脚本文件夹和同一根中的几个特定脚本文件夹,我需要调用特定的脚本文件夹(它调用通用脚本特定问题的参数) . 所以工作目录是这样的
Solutions1和Solutions2调用Scripts文件夹中的PS1,加载存储在ParameterForSolution中的参数 . 所以在powershell ISE中我运行这个命令
Solution1.PS1中的代码是: