V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ghmum
V2EX  ›  问与答

为什么双击 ps1 文件没反应

  •  
  •   ghmum · 2021-08-27 09:06:33 +08:00 · 2220 次点击
    这是一个创建于 1185 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统:10

    写了一个非常简单的代码,保存后双击文件并任何反应,就像没有运行一样,

    但是用 visual studio code 打开文件,运行就能达到效果

    代码只有一行

    16 条回复    2021-08-27 20:32:34 +08:00
    ghmum
        1
    ghmum  
    OP
       2021-08-27 09:09:11 +08:00
    代码不让放,放代码就 1000 天
    脚本的作用是结束所有的 记事本 进程
    passerbytiny
        2
    passerbytiny  
       2021-08-27 09:21:31 +08:00 via Android
    win10 默认情况下禁止执行 PS 脚本,需要手动配置权限。怎么配置忘了,你搜索一下很容易找到
    kiracyan
        3
    kiracyan  
       2021-08-27 09:42:35 +08:00
    powershell 脚本右键运行吧 双击默认是打开 或者写个 bat 去调用
    ghmum
        4
    ghmum  
    OP
       2021-08-27 09:48:55 +08:00
    因为这个脚本是写来放开机启动的,但是发现开机后脚本并没有运行
    ghmum
        5
    ghmum  
    OP
       2021-08-27 09:49:55 +08:00
    @kiracyan 设置了脚本的打开方式为 powershell,也不能双击吗?
    ExplorerLog
        6
    ExplorerLog  
       2021-08-27 09:53:25 +08:00
    Powershe ll 脚本的 4 种执行权限

    Restricted: 默认的设置, 不允许任何 script 运行
    AllSigned: 只能运行经过数字证书签名的 script
    RemoteSigned: 运行本地的 script 不需要数字签名,但是运行从网络上下载的 script 就必须要有数字签名
    Unrestricted: 允许所有的 script 运行
    kiracyan
        7
    kiracyan  
       2021-08-27 09:54:31 +08:00
    @ghmum 那应该可以 你再 pwsh 里面执行有效吗?
    dinghmcn
        8
    dinghmcn  
       2021-08-27 10:05:06 +08:00
    记得安装 scoop 的时候要开放权限的
    Tumblr
        9
    Tumblr  
       2021-08-27 10:21:33 +08:00
    我猜你的计划任务里直接执行 ps1 文件了吧? ps1 脚本的计划任务这样写:
    程序 /脚本:powershell.exe
    参数: -ExecutionPolicy ByPass -File "_path_to_script.ps1"
    ghmum
        10
    ghmum  
    OP
       2021-08-27 11:25:21 +08:00
    @ExplorerLog 当下的权限设置是 RemoteSigned,应该没什么限制吧
    ghmum
        11
    ghmum  
    OP
       2021-08-27 11:26:01 +08:00
    @Tumblr 我是把脚本放到了开机启动的那个文件夹里面,然后开机启动没反应,双击之后也没有反应
    ghmum
        12
    ghmum  
    OP
       2021-08-27 11:26:47 +08:00
    @passerbytiny 我搜索了一下,好像是没有搜到:-(
    Tumblr
        13
    Tumblr  
       2021-08-27 11:33:31 +08:00
    @ghmum #11 这是正常的,ps1 既不是程序也不是可执行脚本。如果要开机启动就用计划任务吧,或者写个 bat 文件来调用你的 ps1 。
    canbingzt
        14
    canbingzt  
       2021-08-27 13:53:13 +08:00
    ysc3839
        15
    ysc3839  
       2021-08-27 18:01:42 +08:00
    @Tumblr 正常情况应该是用记事本打开这个文件,我这边的 shell open command 是这样的。没有任何反应的话可能是被改过了。

    如果你想实现不修改设置,直接打开就能执行的话,可以用下面这种写法
    ```
    <# :
    @powershell.exe -NoProfile -Command "Invoke-Expression (${%~f0} | Out-String)"
    @exit /b
    #>

    Write-Host 'PowerShell!!!'
    ```
    保存为 .cmd 或 .bat 后缀的文件即可。
    印象中是在 StackOverflow 上看到的,但是刚刚没找到。

    这里利用了 cmd 重定向符可以出现在任意位置的特性,`<# :` 会被当成标签解析,不会出现语法错误。
    https://devblogs.microsoft.com/oldnewthing/20060518-07/?p=31153
    以及 cmd 在遇到 exit 或者 goto :EOF 时不会继续解析后面的代码,所以在里面写别的脚本也不会出现语法错误。
    然后 <##> 又是 PowerShell 的注释,所以 PowerShell 执行时也不会出现语法错误。
    powershell.exe 的参数不能直接传文件名,因为 PowerShell 会检查文件名后缀是不是 .ps1 ,所以需要把文件内容读出来执行。
    exip
        16
    exip  
       2021-08-27 20:32:34 +08:00 via Android
    通过 vbs 调用 ps1,不用修改 ps 的执行权限。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1393 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:09 · PVG 01:09 · LAX 09:09 · JFK 12:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.