ghmum
V2EX  ›  问与答

为什么双击 ps1 文件没反应

  •  
  •   ghmum · Aug 27, 2021 · 3073 views
    This topic created in 1728 days ago, the information mentioned may be changed or developed.

    系统:10

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

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

    代码只有一行

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

    Restricted: 默认的设置, 不允许任何 script 运行
    AllSigned: 只能运行经过数字证书签名的 script
    RemoteSigned: 运行本地的 script 不需要数字签名,但是运行从网络上下载的 script 就必须要有数字签名
    Unrestricted: 允许所有的 script 运行
    kiracyan
        7
    kiracyan  
       Aug 27, 2021
    @ghmum 那应该可以 你再 pwsh 里面执行有效吗?
    dinghmcn
        8
    dinghmcn  
       Aug 27, 2021
    记得安装 scoop 的时候要开放权限的
    Tumblr
        9
    Tumblr  
       Aug 27, 2021
    我猜你的计划任务里直接执行 ps1 文件了吧? ps1 脚本的计划任务这样写:
    程序 /脚本:powershell.exe
    参数: -ExecutionPolicy ByPass -File "_path_to_script.ps1"
    ghmum
        10
    ghmum  
    OP
       Aug 27, 2021
    @ExplorerLog 当下的权限设置是 RemoteSigned,应该没什么限制吧
    ghmum
        11
    ghmum  
    OP
       Aug 27, 2021
    @Tumblr 我是把脚本放到了开机启动的那个文件夹里面,然后开机启动没反应,双击之后也没有反应
    ghmum
        12
    ghmum  
    OP
       Aug 27, 2021
    @passerbytiny 我搜索了一下,好像是没有搜到:-(
    Tumblr
        13
    Tumblr  
       Aug 27, 2021
    @ghmum #11 这是正常的,ps1 既不是程序也不是可执行脚本。如果要开机启动就用计划任务吧,或者写个 bat 文件来调用你的 ps1 。
    canbingzt
        14
    canbingzt  
       Aug 27, 2021
    ysc3839
        15
    ysc3839  
       Aug 27, 2021
    @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  
       Aug 27, 2021 via Android
    通过 vbs 调用 ps1,不用修改 ps 的执行权限。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   923 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 21:34 · PVG 05:34 · LAX 14:34 · JFK 17:34
    ♥ Do have faith in what you're doing.