运行 PowerShell 之外的 PowerShell 命令

Run PowerShell command(s) outside of PowerShell

我有这个简单的 PowerShell 脚本:

Copy-Item -path ('\PC1\Images\' + (Get-ChildItem -Path '\PC1\Images' -Attributes !Directory *.dat | Sort-Object -Descending -Property LastWriteTime | Select-Object -first 1)) 'C:\Temp\PC1\screen.jpg' | Start-Process 'C:\Program Files\Google\Chrome\Application\chrome.exe' -ArgumentList 'file:///C:/Temp/PC1/screen.jpg'

如果我从 PowerShell 运行 此命令 window,它工作正常。 如果我将其保存为 .ps1 文件并从 Windows 资源管理器将其保存为 运行,则什么也不会发生(Chrome 无法打开所需的 URL)。

如何才能允许从某个快捷方式执行此脚本? (我想在我的 Windows 任务栏中添加一个 shortcut/icon 以便快速访问)。

你有两个选择:

  • 其中之一:自己制作 .ps1 文件 - 默认情况下,打开时会打开 编辑 (double-clicked) 从文件资源管理器/桌面/任务栏 - 可直接执行:

    • 参见 this answer

    • 重要提示:这样做将使您拖到任务栏的所有 .ps1个文件关联带有 单个 图标,对于 PowerShell 本身,拖动的文件 固定 到该图标;也就是说,对于 运行 这样的文件,您必须通过 PowerShell 图标的 快捷菜单.

  • 或:对于给定的 .ps1 文件,创建伴随 快捷方式文件 (.lnk) 或批处理文件 (.cmd) 通过 PowerShell 的 CLI 启动它(powershell.exe for Windows PowerShell,pwsh.exe适用于 PowerShell(核心)7+)

    • 注意:按照如下所述创建伴随文件后,将其拖动到任务栏将为其提供自己的任务栏图标。

    • Batch-file方法:

      • 在与 .ps1 相同的文件夹中创建一个批处理文件,并使用相同的基本文件名;例如,foo.cmdfoo.ps1

      • .cmd文件中添加如下内容(根据需要添加-NoProfile-ExecutionPolicy Bypass):

         @powershell.exe -NoExit -File "%~dpn0.ps1" %*
        
    • Shortcut-file方法:

      • 请参阅 this answer 以了解如何以交互方式创建此类快捷方式文件

      • 请参阅 this answer 了解如何以编程方式创建快捷方式文件

Powershell 中 运行 下一个命令的输出是什么?

Get-ExecutionPolicy

如果您得到的输出是“受限”,您可以尝试在与 .ps1 文件相同的文件夹中创建一个 .cmd 文件,其下一个内容为:

PowerShell.exe -ExecutionPolicy Bypass -File "your_ps1_name.ps1"