使用其他语言激活 Powershell 脚本
Posted
技术标签:
【中文标题】使用其他语言激活 Powershell 脚本【英文标题】:Powershell script activation using other languages 【发布时间】:2021-10-04 08:23:45 【问题描述】:我有一个 PS 脚本,我需要在用户无需打开 powershell 的情况下运行它——我认为最简单的事情是编写一个应用程序或 .bat 文件来运行 PS 脚本。但是我无法让脚本使用任何其他语言运行。
我尝试过使用 java,但它不运行脚本,C# 或批处理命令也不运行。我会附上下面的批次,因为这似乎是更简单的方法,我只是不确定为什么它不起作用 - 没有错误消息它只是不起作用。
编辑** Powershell 脚本如下,可以运行。我需要一个运行脚本的第三方应用程序。
$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("Select a Folder that you want to Analyze
Please be aware the larger the folder size the Longer it will take to Generate")
@echo off
powershell.exe -ExecutionPolicy Unrestricted -Command "'I:\TestScript\FolderInformation.ps1'"
TIMEOUT /T 10
我只需要能够通过为不知道使用 ISE 或任何其他 PS 应用程序的用户启动单个应用程序来运行脚本。
到目前为止,我使用的任何应用程序或脚本都不能正常工作,只能使用 ISE 来运行它。
*****Java 代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PowerShellJavaDemo
public static void main(String[] args) throws IOException
String line;
String command = "powershell.exe & \"I:\\testingscript\"";
Process powerShellProcess = Runtime.getRuntime().exec(command);
powerShellProcess.getOutputStream().close();
BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream()));
while ((line = stdout.readLine()) != null)
System.out.println("Output: " + line);
stdout.close();
BufferedReader stderr = new BufferedReader(new InputStreamReader(powerShellProcess.getErrorStream()));
while ((line = stderr.readLine()) != null)
System.out.println("Output: " + line);
stderr.close();
【问题讨论】:
而here列出的选项并不能解决问题? 我建议您阅读-file
和 -command
选项的作用。
不是我自己不能运行 PS 脚本。脚本从 ISE 运行 - 我需要能够通过不同的程序运行它
哦,所以你想写一个程序来启动这个PS1。明白了,你使用了什么 Java 代码?也许这对我们来说是一个起点
为什么要使用其他脚本解释器?这真的没有必要。可以创建属性 Target 包含 %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -NoLogo -file "I:\TestScript\FolderInformation.ps1"
的快捷方式文件(.lnk
文件)并自定义其他属性,例如 Start in 和 Comment(将鼠标指针悬停在快捷方式上时显示为工具提示)。然后发布快捷方式文件。
【参考方案1】:
如下所示的两件事可能会有所帮助。
-
删除路径\文件前后的'。如果这没有帮助,那么:
尝试使用“绕过”而不是“无限制”
@echo off
powershell.exe -ExecutionPolicy Bypass -Command
"I:\TestScript\FolderInformation.ps1"
TIMEOUT /T 10
我一直使用它来与我们的服务器通信并运行更新或其他重要信息。
注意:您的组策略可能会限制这一点。如果以上都不起作用。
我可能有一个解决方案,您可以使用 ISE。
start powershell_ise.exe "I:\TestScript\FolderInformation.ps1"
timeout /t 5
ECHO Set obkey = CreateObject("WScript.Shell") > temp.vbs
ECHO obkey.SendKeys "F5" >> temp.vbs
cscript temp.vbs
DEL temp.vbs
timeout /t 5
taskkill /im powershell_ise.exe
pause
【讨论】:
遗憾的是,这也不起作用 - 所以它似乎是一个组策略的事情。问题是我无权更改这些,所以我不确定下一步。无论使用何种语言,似乎都没有运行脚本。 @MichaelSchwarz 我明白了。如果您无法打开 Powershell.exe 而不是 Powershell_ISE.exe 并从那里运行脚本,则组策略正在阻止 Powershell 运行。 ISE 通常用于测试,并且通常不包含在组策略中,因此您可以使用它的原因(我认为它通常被忽略)。您需要获得对组策略的访问权限,或者要求允许它在您尝试通过管理员运行它的系统上运行。你能在本地打开 gpedit.exe 吗? 我的任务是编写一个程序,该程序基本上根据用户输入在驱动器中搜索特定文件,并且它需要可由其他用户运行。我每次都可以右键单击并使用 ISE 运行,但我希望让用户更轻松,并允许他们简单地运行 .bat 之类的东西并运行脚本。 看看我编辑了我的答案以包含一个可能的解决方案。试一试,让我知道。 这确实有效,尽管我必须删除 taskkill,因为它会导致它在打开后立即关闭。但这是一种可能的解决方案。以上是关于使用其他语言激活 Powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Powershell/其他脚本设置 Bamboo 变量?
如何使用Argument将路径文件作为输入数据获取到PowerShell中的其他脚本?