如何从其他powershell脚本调用powershell脚本并且脚本是在powershell对象而不是文件中分配的
Posted
技术标签:
【中文标题】如何从其他powershell脚本调用powershell脚本并且脚本是在powershell对象而不是文件中分配的【英文标题】:How to call powershell script from other powershell script and script is assigned in the powershell object instead of the file 【发布时间】:2022-01-24 04:32:50 【问题描述】:我正在编写一个 PowerShell 脚本,并且我还有另一个 PowerShell 脚本。 我知道,如果它存储在路径中,我们可以使用下面的代码
$scriptPath = "D:\Ashish\powershell\script.ps1"
$argumentList = "asdf fgh ghjk"
$output =Invoke-Expression "& `"$scriptPath`" $argumentList"
但我的 PowerShell 存储在对象而不是文件中。我正在使用下面的代码
$argumentList = "asdf fgh ghjk"
$logPath = "C:\AshishG\powershell\script21.txt"
$x = 'Write-Host "Hello script2" return "script2"' #This is my powershell script
//Write code here to call this script($x) with params and store the return value in the other object and also store the logs in $logpath
一种方法是将 PowerShell 存储到 script.ps1,但我认为,应该有某种方法可以从 PowerShell 对象本身调用它?
请分享您的建议。
【问题讨论】:
【参考方案1】:看来您正在寻找script block:
$argumentList = "asdf fgh ghjk"
$logPath = "C:\AshishG\powershell\script21.txt"
$x =
param($arguments, $path)
"Arguments: $arguments"
"Path: $path"
可以使用call operator &
:执行脚本块:
& $x -arguments $argumentList -path $logPath
或者dot sourcing operator .
:
. $x -arguments $argumentList -path $logPath
.Invoke(..)
method 也可以使用,但是在这种情况下不常用且不推荐使用。更多信息请见this answer:
$x.Invoke($argumentList, $logPath)
另一个选项是调用[scriptblock]::Create(..)
方法,如果脚本存储在字符串中,这是Invoke-Expression
which should be avoided. 的推荐替代方法。这也非常有用,例如当我们需要将 function
传递给不同的范围时。感谢@mklement0对此的提醒:)
$argumentList = "asdf fgh ghjk"
$logPath = "C:\AshishG\powershell\script21.txt"
$x = @'
"Arguments: $argumentList"
"Path: $logPath"
'@
& ([scriptblock]::Create($x))
# Or:
$scriptblock = [scriptblock]::Create($x)
& $scriptblock
【讨论】:
我的 PowerShell 脚本存储在 $x 中,但您已更改它。我不清楚你的逻辑。 powershell 脚本在哪里 [t in this - & $x -arguments $argumentList -path $logPath @AshishGoyanka 我已经添加了 mklement0 的评论,使用[scriptblock]::Create()
,这与您正在做的类似,另一种选择是使用 Invoke-Expression
,但我不推荐它。跨度>
以上是关于如何从其他powershell脚本调用powershell脚本并且脚本是在powershell对象而不是文件中分配的的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 中的 powershell 脚本中捕获退出代码
从 Powershell 调用的 DLL 使用相对于 Powershell 安装目录的路径。如何将其设置为其他内容?
如何使用 Python 中的参数运行 PowerShell 脚本