.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 播放声音?的主要内容,如果未能解决你的问题,请参考以下文章