如何运行PowerShell脚本而不向用户显示窗口或任何其他符号?
换句话说,脚本应该在后台安静地运行,而不需要向用户发出任何信号。
不使用第三方组件的答案可获得额外分数:)
如何运行PowerShell脚本而不向用户显示窗口或任何其他符号?
换句话说,脚本应该在后台安静地运行,而不需要向用户发出任何信号。
不使用第三方组件的答案可获得额外分数:)
当前回答
为了方便命令行使用,有一个简单的包装器应用程序:
https://github.com/stax76/run-hidden
命令行示例:
run-hidden powershell -command calc.exe
其他回答
下面是windows 10中不包含任何第三方组件的工作解决方案。它的工作原理是将PowerShell脚本包装到VBScript中。
第一步:我们需要改变一些windows特性,允许VBScript运行PowerShell,并默认使用PowerShell打开。ps1文件。
-运行并输入“regedit”。单击ok,然后允许它运行。
-粘贴此路径"HKEY_CLASSES_ROOT\Microsoft.PowerShellScript. "1\Shell”并按enter键。
-现在打开右边的条目并将值更改为0。
-以管理员身份打开PowerShell,输入“Set-ExecutionPolicy -ExecutionPolicy remotessigned”,按enter并确认更改“y”,然后输入。
步骤2:现在我们可以开始包装脚本了。
-将Powershell脚本保存为.ps1文件。
-创建一个新的文本文档并粘贴这个脚本。
Dim objShell,objFSO,objFile
Set objShell=CreateObject("WScript.Shell")
Set objFSO=CreateObject("Scripting.FileSystemObject")
'enter the path for your PowerShell Script
strPath="c:\your script path\script.ps1"
'verify file exists
If objFSO.FileExists(strPath) Then
'return short path name
set objFile=objFSO.GetFile(strPath)
strCMD="powershell -nologo -command " & Chr(34) & "&{" &_
objFile.ShortPath & "}" & Chr(34)
'Uncomment next line for debugging
'WScript.Echo strCMD
'use 0 to hide window
objShell.Run strCMD,0
Else
'Display error message
WScript.Echo "Failed to find " & strPath
WScript.Quit
End If
-现在更改文件路径到你的。ps1脚本的位置,并保存文本文档。
-现在右键单击文件并重命名。然后将文件名扩展名更改为.vbs,按enter键,然后单击确定。
完成了!如果你现在打开.vbs,当你的脚本在后台运行时,你应该看不到控制台窗口。
您可以使用PowerShell社区扩展来完成以下操作:
start-process PowerShell.exe -arg $pwd\foo.ps1 -WindowStyle Hidden
你也可以用VBScript: http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/这样做
计划隐藏的PowerShell任务(Internet Archive) 更多的乐趣与计划的PowerShell(互联网档案)
(通过这个论坛。)
答案是-WindowStyle Hidden,但窗口仍然会闪烁。
我从未见过窗口闪烁时调用cmd /c start /min ""。
您的机器或设置可能不同,但对我来说很好。
1. 调用文件
cmd /c start /min "" powershell -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Users\username\Desktop\test.ps1"
2. 用参数调用文件
cmd /c start /min "" powershell -WindowStyle Hidden -ExecutionPolicy Bypass -Command ". 'C:\Users\username\Desktop\test me.ps1' -Arg1 'Hello' -Arg2 'World'"ps1'; -Arg1 'Hello' -Arg2 ' World'"
Powershell内容为2。调用带有参数的文件是:
Param
(
[Parameter(Mandatory = $true, HelpMessage = 'The 1st test string parameter.')]
[String]$Arg1,
[Parameter(Mandatory = $true, HelpMessage = 'The 2nd test string parameter.')]
[String]$Arg2
)
Write-Host $Arg1
Write-Host $Arg2
3.用函数和参数调用文件
cmd /c start /min "" powershell -WindowStyle Hidden -ExecutionPolicy Bypass -Command ". 'C:\Users\username\Desktop\test me.ps1'; Get-Test -stringTest 'Hello World'"
Powershell内容为3。调用带有函数和参数的文件是:
function Get-Test() {
[cmdletbinding()]
Param
(
[Parameter(Mandatory = $true, HelpMessage = 'The test string.')]
[String]$stringTest
)
Write-Host $stringTest
return
}
如果你需要在任务调度器中运行这个,那么调用%comspec%作为程序/脚本,然后调用上面文件的代码作为参数。
注意:当PS1文件的路径中有空格时,所有示例都有效。
你可以像这样运行它(但这会显示一个窗口):
PowerShell.exe -WindowStyle hidden { your script.. }
或者您可以使用我创建的一个帮助文件来避免名为PsRun.exe的窗口,它正是这样做的。您可以在PowerShell中使用WinForm GUI运行计划任务中下载源文件和exe文件。我用它来完成计划好的任务。
已编辑:正如Marco所指出的,此-WindowStyle参数仅适用于V2及以上版本。
当您计划任务时,只需在“常规”选项卡下选择“无论用户是否登录都运行”。
另一种方法是让任务以另一个用户的身份运行。