Powershell v .bat Call中是否有Soundplayer的区别?

时间:2017-10-11 15:16:24

标签: powershell batch-file audio

作为一个恶作剧的一部分,我制作了一个PowerShell脚本,将音量提升到最高水平并播放10个屁声中的1个。它由.bat。

调用

当我在Powershell ISE程序中运行它时,它运行得很好但是当我从.bat文件调用PS1时,声音没有发出(但是脚本的其他方面都有效)。在我调试时,我添加了“奇怪的部分”(见下文),并且.bat文件开始工作并且每次都播放随机噪音(不仅仅是声音0)

这是什么原因?

$a=0
while ($a -lt 100){
$obj = new-object -com wscript.shell
$obj.SendKeys([char]175)
$a=$a+1
}

$x= random(10)
$sound = new-Object System.Media.SoundPlayer
$file="S:\Test\farts\$x.wav"
$sound.SoundLocation=$file
$sound.Play()
write-host $x

奇怪的部分V

& soundplayer.play("S:\Test\farts\0.wav");

(由@ powershell.exe -executionpolicy Bypass -file S:\ POWERSHELL_SCRIPTS \ fart.ps1调用)

1 个答案:

答案 0 :(得分:1)

我尝试玩了一段时间的脚本,但感到惊讶的是您的设置正确,当不在交互式Powershell中运行脚本时声音无法播放。

在进行一些挖掘之后,在MSDN上找到了该线程,这说明了原因:

  

出于安全目的,媒体播放器需要交互式UI。

https://social.microsoft.com/Forums/en-US/2af7ca7a-52aa-4d0a-9eb7-38b863e66d45/powershell-alarm-sound-in-task-scheduler-with-option-quotrun-whether-user-is-logged-on-or?forum=Offtopic

如果您只是想播放一些声音(而不是放屁),我会使用:

[system.Console]::beep(<Frequency>,<Time in ms>)

我在很多脚本中使用它来提醒我一些事情