我正在尝试使Task Schedule Task成为任务,因此正在运行PowerShell脚本是完全不可见的,因此我在配置如下的Win10计算机上创建了Task:
程序/脚本:
powershell.exe
添加参数(可选):
-WindowStyle Hidden -command "& {Out-File 'C:\temp\somefile.txt'}" -NonInteractive -NoLogo -NoProfile
当我运行此任务时,powershell命令窗口会突然弹出,这是我不需要的。
答案 0 :(得分:0)
您可以使用“应用程序主机”类型包装器解决此问题。这是Powershell作为基于控制台的主机的一个已知问题。
我发现最方便的方法是使用WScript.exe
并运行一个VBS脚本,该脚本将“无形地”调用该过程,而不会导致控制台或任务栏闪烁。
VBS代码:
On Error Resume Next
ReDim args(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
If InStr(WScript.Arguments(i), " ") > 0 Then
args(i) = Chr(34) & WScript.Arguments(i) & Chr(34)
Else
args(i) = WScript.Arguments(i)
End If
Next
CreateObject("WScript.Shell").Run Join(args, " "), 0, False
将上面的代码保存在扩展名为“ .vbs”的文件中,并将其放置在运行任务的客户端可以运行的位置。该文件可能位于网络上受保护的文件共享中(如果您希望脚本调用的脚本仅在连接到网络时才运行),也可以位于客户端本地。
现在,当您调用基于控制台的脚本(PowerShell,BAT,CScript等)时,将使用WScript显式WScript.exe
来调用此VBS脚本。还可以抛出“批处理模式”参数//B
,这会抑制脚本错误和提示,例如是否找不到包装文件本身。
在这一点上,您需要做的就是传递powershell和要Powershell运行到此启动序列的命令:
WScript.exe //B "\\Path\To\Launcher.VBS" powershell.exe -ExecutionPolicy ByPass -file "\\Powershell\Script\To\Run"