【问题标题】:Is there a Soundplayer difference in Powershell v .bat Call?Powershell v .bat Call 中是否存在 Soundplayer 差异?
【发布时间】:2017-10-11 15:16:24
【问题描述】:

作为一个恶作剧的一部分,我制作了一个 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

奇怪的第五部分

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

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

【问题讨论】:

  • 你能粘贴整个脚本吗....我真的不确定声音播放器在哪里被调用?
  • "& soundplayer.play("S:\Test\farts\0.wav");"你为什么这么叫?如果你已经从 PS1 脚本播放它??
  • 您的部分问题没有意义。您已经展示了以下内容,& soundplayer.play("S:\Test\farts\0.wav"); 是 powershell 脚本文件的一部分还是它的输出?如果不是,它是如何相关的?您还显示了一个命令行来调用 powershell 脚本,@powershell.exe -executionpolicy Bypass -file S:\POWERSHELL_SCRIPTS\fart.ps1;这是.bat 文件的一部分还是全部?
  • 两个灰色区域构成了我的 ps1 脚本。它由 .bat 调用。上半部分作为 .ps1 工作,但是当 .bat 文件调用 .ps1 时,没有声音出来。那条额外的行应该没有意义,但是 .bat 可以正常使用它(调用随机声音,而不仅仅是每次 #0)。我的问题是为什么脚本的上半部分在 PS1 中有效,但在 .bat 中无效,以及为什么额外的一行导致 .bat 有效?

标签: powershell batch-file audio


【解决方案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>)

我将它用于许多提醒我有关内容的脚本

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多