.bat 作业完成运行后,如何让 Windows PowerShell 播放声音?

Posted

技术标签:

【中文标题】.bat 作业完成运行后,如何让 Windows PowerShell 播放声音?【英文标题】:How do you get Windows PowerShell to play a sound after .bat job has finished running? 【发布时间】:2019-05-08 01:48:09 【问题描述】:

正如标题所述,我有一个在 PowerShell 中运行的 .bat 作业,运行完成后,我希望发出声音通知。我想知道是否有一个 PowerShell 命令可以添加到我现有的 PowerShell 命令中。

【问题讨论】:

【参考方案1】:

除了@TheGameiswar 建议的解决方案之外,您还可以通过让系统真正与您对话来获得一些乐趣:

# Create a new SpVoice objects
$voice = New-Object -ComObject Sapi.spvoice

# Set the speed - positive numbers are faster, negative numbers, slower
$voice.rate = 0

# Say something
$voice.speak("Hey, Harcot, your BAT file is finished!")

注意:我只在 Windows 10 上测试过,所以它可能无法在其他版本上运行,但请试一试。

【讨论】:

当系统知道你的名字时更有趣(在域上工作,如果不在域上,可能使用环境变量作为用户名):(New-Object -ComObject Sapi.spvoice).speak("Hey, $(([adsi]"LDAP://$(whoami /fqdn)").givenName), your BAT file is finished!") 当我不想一直检查控制台输出时,我用它来跟踪手动启动的 SQL 作业。 喜欢这个,我将在所有长时间运行的命令之后连接它的执行:)【参考方案2】:

您可以使用 powershell 自动变量来检查 bat 文件状态..根据this,$? 如果命令成功,则返回 true..

下面是示例代码

$a =Invoke-Command -ScriptBlock 

& "C:\temp1\test.bat"


if($?)

[console]::beep(500,300)


您还可以播放自定义声音,

$PlayWav=New-Object System.Media.SoundPlayer

$PlayWav.SoundLocation=’C:\Foo\Soundfile.wav’

$PlayWav.playsync()

参考资料:https://devblogs.microsoft.com/scripting/powertip-use-powershell-to-play-wav-files/

【讨论】:

请注意,如果您的系统声音设置为静音,这将不起作用。【参考方案3】:

除了boxdog (here) 和TheGameiswar (here) 的出色解决方案之外,我想提一下另一种可能性,它可以让您播放一些标准的系统声音:

[System.Media.SystemSounds]::Asterisk.Play()
[System.Media.SystemSounds]::Beep.Play()
[System.Media.SystemSounds]::Exclamation.Play()
[System.Media.SystemSounds]::Hand.Play()
[System.Media.SystemSounds]::Question.Play()

【讨论】:

以上是关于.bat 作业完成运行后,如何让 Windows PowerShell 播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

怎么让“bat文件”自动运行?

如何让bat,cmd文件后台运行?

Windows 2008 服务器任务调度程序不运行 .bat 批处理作业 [关闭]

bat运行后的所有记录如何保存为txt

怎么把.bat添加成系统服务让开机自动启动

如何编写bat文件