不能在同一 PowerShell 会话中运行同一脚本两次



我正在编写一个PowerShell脚本,该脚本将打开一个应用程序,运行一个进程,然后关闭它,然后打开另一个应用程序,运行一个进程,然后关闭它。 (最终超过两个,但我从小处着手。

我可以运行以下脚本,没有任何问题:

# Project Config
$projectName = "c:temptest3.egp"
$projectName2= "c:temptest4.egp"
# Start Enterprise Guide
$app = New-Object -ComObject SASEGObjectModel.Application.7.1
#Open the Enterprise Guide Project
$projectObject = $app.Open($projectName, "")
# Save the Enterprise Guide Project
$projectObject.Save()
# Close the Enterprise Guide Project
$projectObject.Close()
# Open the second project
$projectObject = $app.Open($projectName2, "")
# Save the second project
$projectObject.Save()
#Close the second project
$projectObject.Close()
# Quit Enterprise Guide
$app.Quit()
PS C:temp> ./test.ps1
PS C:temp>

但是,如果我在上面的提示符下第二次运行它,而不退出 PowerShell,我会收到错误。

PS C:temp> ./test.ps1
Exception calling "Open" with "2" argument(s): "Path is not a directory 'C:': The filename, directory name, or volume label syntax is incorrect."
At C:temptest.ps1:9 char:27
+ $projectObject = $app.Open <<<< ($projectName, "")
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
... more errors related to $projectObject not having a value, and then a second copy of each of these for the second attempt ... 
PS C:temp>

如果我退出Powershell,然后重新打开Powershell,然后再次运行它,它工作正常。

记录的限制主要包括一次只能打开一个项目;但是,显然$projectObject.Close()工作正常,因为它确实在一个脚本中成功运行了两个。 只有当我离开脚本并再次运行它时,它才是一个问题。

现在,如果我删除$app.Quit(),它允许我在同一会话中第二次运行它;但我确实想退出应用程序(以确保脚本的任何后续运行都不会受到我刚刚所做的任何事情的影响;这是一个编程环境,所以设置会话宏变量等可能会产生不良影响(。 我也不完全理解为什么第$app = New-Object ...行没有创建应用程序的新实例(以及为什么之前的运行$app退出是相关的(?

PowerShell中是否有我在这里做错了什么? 或者这仅仅是我正在使用的API的问题,我必须与SAS(供应商(交谈?

在原始 PS 会话中为每个项目创建一个新的 PS 会话:New-PSSession

更多详细信息和示例可在此处的Microsoft文档站点上找到。

最新更新