因此,我刚刚编写了第一个使用Windows窗体创建和显示GUI的PowerShell脚本。
如果我在PowerShell ISE中运行脚本,或直接从PowerShell命令行调用.ps1,则脚本将运行,GUI出现并且一切都很好。但是,如果我只是双击.ps1文件以“启动”脚本,则PowerShell提示会快速打开和关闭,并且没有GUI(它会立即终止)。
我想念什么吗?这是脚本中显示GUI的最后一行。
$crsc_main_form.ShowDialog()
谢谢。
答案 0 :(得分:0)
我没有在这里看到周围的代码,但是除非您将执行策略设置为绕过或不受限制,否则某些代码将无法运行。
我的猜测是,当您尝试按照说明运行.ps1文件时,会话受到限制
尝试添加以下内容:
url = 'https://finance.yahoo.com/quote/SPY'
result = requests.get(url)
c = result.content
html = BeautifulSoup(c, 'html.parser')
scripts = html.find_all('script')
sl =[]
for s in scripts:
sl.append(s)
s = (sl[-3])
s = s.contents
s = str(s)
s = s[119:-16]
json_data = json.loads(s)
这会将文本文件写入您的桌面,显示执行策略是什么
答案 1 :(得分:0)
您的脚本至少要尝试运行 的事实表明您已经自定义系统,因为默认情况下,双击FileExplorer中的PowerShell脚本会打开它们进行编辑< / em>-请参阅下面的常规信息。
一些故障排除提示:
ISE在同一会话中重复执行脚本,因此先前运行的状态可能会影响后续运行。
要排除这些影响,请从常规的PowerShell控制台窗口运行脚本。
将以下行放在脚本的顶部,以防止在从文件资源管理器执行过程中发生错误时,窗口立即关闭;这将使您有机会看到错误消息:
trap { Write-Error $_; pause }
根据设计,从Windows shell(桌面,文件资源管理器,任务栏,“开始”菜单)中双击(打开)*.ps1
文件不会 执行它们-而是根据记事本或Windows PowerShell版本,在记事本或PowerShell ISE中打开它们进行编辑 。
但是,至少从Windows 7开始,*.ps1
文件的快捷菜单包含 Run with PowerShell
命令, / em>调用手边的脚本,即通过在注册表项[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\0\Command]
中定义的以下命令(从Windows 10开始):
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
除非执行策略AllSigned
有效-在这种情况下,只能执行 signed 脚本,但在没有提示的情况下执行 -命令将尝试将被调用进程的执行策略设置为Bypass
,这意味着可以执行任何脚本,但是只能在用户事先响应确认提示之后执行(无论该脚本是否已签名,以及是否已从Web下载)。
至少在Windows 7早期版本/ PowerShell版本中,该命令定义错误 [1] ,有效地忽略了设置进程的尝试'执行策略,这意味着将应用永久配置的任何执行策略-不会显示确认提示。
如果您想通过双击/打开来影响执行,则有两种选择:
定义用于调用脚本的快捷文件 *.lnk
。
使用注册表为Open
上的*.ps1
个文件重新定义[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\Open\Command]
快捷菜单命令
*.ps1
文件的用户的期望,导致他们被打开进行 editing ,因此可能导致意外执行文件。 [1]较早的,不完整的命令定义是"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-file" "%1" "-Command" "if((Get-ExecutionPolicy ) -ne AllSigned) { Set-ExecutionPolicy -Scope Process Bypass }"
,这意味着-file "%1"
之后的所有内容都作为 arguments 传递到文件"%1"
而不是-Command
之后的命令的预期执行;另外-有争议的地方-AllSigned
操作数将需要加引号。
答案 2 :(得分:0)
我发现了问题所在。该错误是由我的.ps1文件的位置引起的。它在一个有空格的文件夹中,因此当我尝试启动它时,PowerShell提示符将快速打开并关闭,并且错误消息显示了毫秒,即“ Term $ PATH不被识别为名称。一个cmdlet”。
“解决方案”是将文件移动到路径中没有空格的位置(即C:\ Temp)。我可能可以调整系统,以便在启动时将路径放入“”内。