如何防止powershell在脚本执行过程中打开两个窗口?

How to prevent powershell from opening two windows during script execution?

提问人:dpresnell90 提问时间:9/26/2023 更新时间:9/27/2023 访问量:59

问:

我有一个简单的powershell脚本,它可以在执行时自动通过电子邮件发送XML文件。

我有一个用 Visual Basic 编写的 VB.NET 控制台应用程序,它会在满足某些参数后调用程序中的 powershell 脚本来执行。

powershell 脚本的调用有效,powershell 按预期执行,但无论出于何种原因,powershell 脚本都会执行两次。这通常不会成为问题,但因此,当它应该只发送一封电子邮件时,它会发送重复的电子邮件。

下面是调用 powershell 脚本的代码:

 Public Sub SendDaEmailMakeXMLFile()
     Using p As Process = New Process
         p.StartInfo = New ProcessStartInfo() With {
             .CreateNoWindow = True,
             .UseShellExecute = True,
             .FileName = "C:\SVMXEmailAutomation.ps1"
         }
         p.Start()
         p.WaitForExit()
         p.Close()




     End Using
 End Sub

第二个窗口弹出并立即执行 如果我删除如下所示的 WaitforExit() 命令:enter image description here

如果我保留 WaitforExit() 命令,第一个窗口将按预期工作,关闭,然后第二个实例将直接弹出并执行。

我在语法上犯了错误吗?我的日志上没有错误输出。

感谢您的评论。

vb.net PowerShell visual-studio 控制台应用程序

评论

1赞 mclayton 9/26/2023
从表面上看,您的函数似乎更有可能被调用两次 - 例如,如果您将命令替换为“notepad.exe”,您是否会打开两个记事本应用程序,或者这仅在您调用 ps1 脚本时发生?如果在 VB.Net 代码中添加一些日志记录,例如“entering SendDaEmailMakeXMLFile”,则会在日志中看到两次还是只看到一次?
0赞 Jimi 9/26/2023
如果将 、设置为 powershell 可执行文件和 ,它是否执行相同的操作?如果是这样,请在某处进行双重执行,如前所述。.UseShellExecute = False,.FileName.Arguments$"-File ""{[path to your script]}"""
0赞 dpresnell90 9/26/2023
@mclayton你是绝对正确的。我按照您列出的步骤进行操作,当用“notepad .exe”替换命令时,它确实打开了两个记事本窗口,至于日志记录,我在添加日志记录时确实看到了两次。什么可能会调用该函数两次,因为它没有在日志中指定原因?
1赞 mclayton 9/26/2023
如果不看你的其余代码,就不可能说。尝试在 SendDaEmailMakeXMLFile 中添加一个断点并查看调用堆栈中的函数,或者在调用函数中添加更多日志记录以查看它们是否也被调用了两次 - 基本上是向后工作,直到找到罪魁祸首......
0赞 Tu deschizi eu inchid 9/26/2023
您可能对以下内容感兴趣:stackoverflow.com/a/74005878/10024425

答:

0赞 dpresnell90 9/27/2023 #1

感谢大家的帮助和帮助!

在浏览日志文件并使用断点后,我确定将代码放置在其自己的子类中时,它会导致代码执行两次。我只是删除了 SendDaEmailMakeXMLFile() 公共子类,并将前面列出的代码放在完整程序的主子正文中。

这样做只会导致代码按预期执行一次。 希望这将对将来遇到此问题的其他人有所帮助!