Nic*_*nto 121 powershell
我希望在Powershell ISE内的第二个myScript2.ps1脚本中调用myScript1.ps1脚本.
MyScript2.ps1中的以下代码在Powershell Administration中运行良好,但在PowerShell ISE中不起作用:
#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1
Run Code Online (Sandbox Code Playgroud)
从PowerShell ISE执行MyScript2.ps1时出现以下错误:
术语".\ myScript1.ps1"未被识别为cmdlet,函数,脚本文件或可操作程序的名称.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.
Jas*_*her 79
为了找到脚本的位置,请使用Split-Path $MyInvocation.MyCommand.Path
(确保在脚本上下文中使用它).
您可以使用此示例脚本说明您应该使用它而不是其他任何内容的原因.
## ScriptTest.ps1
Write-Host "InvocationName:" $MyInvocation.InvocationName
Write-Host "Path:" $MyInvocation.MyCommand.Path
Run Code Online (Sandbox Code Playgroud)
这是一些结果.
PS C:\Users\JasonAr> .\ScriptTest.ps1 InvocationName: .\ScriptTest.ps1 Path: C:\Users\JasonAr\ScriptTest.ps1 PS C:\Users\JasonAr> . .\ScriptTest.ps1 InvocationName: . Path: C:\Users\JasonAr\ScriptTest.ps1 PS C:\Users\JasonAr> & ".\ScriptTest.ps1" InvocationName: & Path: C:\Users\JasonAr\ScriptTest.ps1
在PowerShell 3.0及更高版本中,您可以使用自动变量$PSScriptRoot
:
## ScriptTest.ps1
Write-Host "Script:" $PSCommandPath
Write-Host "Path:" $PSScriptRoot
Run Code Online (Sandbox Code Playgroud)
PS C:\Users\jarcher> .\ScriptTest.ps1 Script: C:\Users\jarcher\ScriptTest.ps1 Path: C:\Users\jarcher
Sha*_*evy 33
MyScript1.ps1的当前路径与myScript2.ps1不同.您可以获取MyScript2.ps1的文件夹路径并将其连接到MyScript1.ps1,然后执行它.两个脚本必须位于同一位置.
## MyScript2.ps1 ##
$ScriptPath = Split-Path $MyInvocation.InvocationName
& "$ScriptPath\MyScript1.ps1"
Run Code Online (Sandbox Code Playgroud)
Sri*_*osh 23
我从myScript2.ps1调用myScript1.ps1.
假设两个脚本都在同一个位置,首先使用以下命令获取脚本的位置:
$PSScriptRoot
Run Code Online (Sandbox Code Playgroud)
然后,添加您要调用的脚本名称,如下所示:
& "$PSScriptRoot\myScript1.ps1"
Run Code Online (Sandbox Code Playgroud)
这应该工作.
noe*_*cus 17
一线解决方案:
& ((Split-Path $MyInvocation.InvocationName) + "\MyScript1.ps1")
Run Code Online (Sandbox Code Playgroud)
要轻松执行与调用者相同的文件夹(或子文件夹)中的脚本文件,您可以使用以下命令:
# Get full path to the script:
$ScriptRoute = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, "Scriptname.ps1"))
# Execute script at location:
&"$ScriptRoute"
Run Code Online (Sandbox Code Playgroud)
这只是答案的附加信息,以便将参数传递到另一个文件中
你在哪里争论
PrintName.ps1
Param(
[Parameter( Mandatory = $true)]
$printName = "Joe"
)
Write-Host $printName
Run Code Online (Sandbox Code Playgroud)
如何调用文件
Param(
[Parameter( Mandatory = $false)]
$name = "Joe"
)
& ((Split-Path $MyInvocation.InvocationName) + "\PrintName.ps1") -printName $name
Run Code Online (Sandbox Code Playgroud)
如果不提供任何输入,它将默认为“ Joe”,并将作为参数传递给PrintName.ps1文件中的printName参数,该文件将依次打印出“ Joe”字符串
小智 5
您可能已经找到了答案,但这就是我所做的。
我通常将此行放在安装脚本的开头:
if(!$PSScriptRoot){ $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent } #In case if $PSScriptRoot is empty (version of powershell V.2).
Run Code Online (Sandbox Code Playgroud)
然后我可以使用 $PSScriptRoot 变量作为当前脚本(路径)的位置,如下例所示:
if(!$PSScriptRoot){ $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent } #In case if $PSScriptRoot is empty (version of powershell V.2).
Try {
If (Test-Path 'C:\Program Files (x86)') {
$ChromeInstallArgs= "/i", "$PSScriptRoot\googlechromestandaloneenterprise64_v.57.0.2987.110.msi", "/q", "/norestart", "/L*v `"C:\Windows\Logs\Google_Chrome_57.0.2987.110_Install_x64.log`""
Start-Process -FilePath msiexec -ArgumentList $ChromeInstallArgs -Wait -ErrorAction Stop
$Result= [System.Environment]::ExitCode
} Else {
$ChromeInstallArgs= "/i", "$PSScriptRoot\googlechromestandaloneenterprise_v.57.0.2987.110.msi", "/q", "/norestart", "/L*v `"C:\Windows\Logs\Google_Chrome_57.0.2987.110_Install_x86.log`""
Start-Process -FilePath msiexec -ArgumentList $ChromeInstallArgs -Wait -ErrorAction Stop
$Result= [System.Environment]::ExitCode
}
} ### End Try block
Catch {
$Result = [System.Environment]::Exitcode
[System.Environment]::Exit($Result)
}
[System.Environment]::Exit($Result)
Run Code Online (Sandbox Code Playgroud)
对于你的情况,你可以替换
启动进程... 符合
调用表达式 $PSScriptRoot\ScriptName.ps1
您可以在 Microsoft 站点上阅读有关 $MYINVOCATION 和 $PSScriptRoot 自动变量的更多信息:https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_automatic_variables
归档时间: |
|
查看次数: |
333960 次 |
最近记录: |