Có cách nào để làm cho tập lệnh PowerShell hoạt động bằng cách nhấp đúp vào tệp .ps1 không?


139

Tôi đang phân phối tập lệnh PowerShell cho nhóm của mình. Kịch bản là tìm nạp địa chỉ IP từ máy khách Vsphere, tạo kết nối mstsc và đăng nhập vào tệp chia sẻ.

Khoảnh khắc họ sử dụng tập lệnh họ đã biết địa chỉ IP của máy. Sau đó, họ luôn có xu hướng sử dụng mstsc trực tiếp thay vì chạy tập lệnh PowerShell. (Vì họ đang sử dụng mstsc nên tôi không thể biết liệu họ có đang sử dụng VM thường xuyên hay không.)

Chủ yếu họ nói với tôi rằng chạy PowerShell không đơn giản.

Tôi phát ốm vì sự lười biếng của họ.

Có cách nào để làm cho tập lệnh PowerShell hoạt động bằng cách nhấp đúp vào tệp .ps1 không?


3
Làm thế nào về việc sử dụng nhật ký trên máy chủ? "Đừng tin tưởng người dùng" có thể có nghĩa là bạn không thể tin tưởng anh ta với dữ liệu của mình, nhưng thường thì điều đó có nghĩa là đừng tin anh ta để không lười biếng.


Biên dịch tập lệnh PS bằng cách sử dụng Powershell studio sapien.com/software/powershell_studio
Root Loop

Tôi thích chạy nó qua vscode (vì vậy tôi có thể thấy an ủi và gỡ lỗi nó)
JinSnow

Câu trả lời:


132

Tạo một lối tắt với cái gì đó như "Target":

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"

3
Vì Jeffery Hicks (Ông là một nguồn tài nguyên có thẩm quyền trong powershell) khuyên rằng không nên thay đổi cài đặt, tôi sẽ bỏ phiếu câu trả lời của bạn là câu trả lời tốt nhất và câu trả lời của JPBlanc là câu trả lời hữu ích.
Samselvaprabu

6
sử dụng điều này với: `-noLogo -ExecutPolicy không bị giới hạn -file <path>` như được trả lời bởi: @ user3071883
Ujjwal Singh

1
@UjjwalSingh: -NoProfilecũng hữu ích, vì hồ sơ có thể làm tất cả các loại mà kịch bản không mong đợi.
Joey

5
Đối với độc giả tương lai: Có một bản hack registry trong các câu trả lời dưới đây thực hiện những gì OP yêu cầu. Câu trả lời được chấp nhận không.
Wouter

2
Có cách nào để làm điều này nhưng sử dụng đường dẫn tương đối / hiện tại không?
huyền thoại

78

Hoặc nếu bạn muốn tất cả các tệp PS1 hoạt động theo cách các tệp VBS thực hiện, bạn có thể chỉnh sửa sổ đăng ký như thế này:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command

Chỉnh sửa giá trị Mặc định thành một cái gì đó giống như vậy ...

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"

Sau đó, bạn có thể chỉ cần nhấp đúp vào tất cả các tệp .PS1 như bạn muốn. theo ý kiến ​​khiêm tốn của tôi, có thể ra khỏi hộp.

Tôi sẽ gọi đây là "Hack chống thiến Powershell". LOL thưởng thức!


26
Đây là người duy nhất làm việc cho tôi trong danh sách câu trả lời này. Tôi không sẵn sàng chấp nhận "Không nên khuyên" như một câu trả lời - Tôi nói với PC phải làm gì, PC không cho tôi biết.
Matt

7
Đây thực sự là một bỏ qua hai lần. Xóa bỏ hạn chế đối với nhấp đúp để chạy chạy xung quanh ExecutPolicy của PowerShell, điều này có nghĩa là để ngăn việc chạy các tập lệnh không đáng tin ngay cả từ bảng điều khiển.
Iszi

4
Đây là cách sai để làm điều đó. Bạn đang thay đổi lệnh "Mở" làm gì thay vì đặt "Chạy với PowerShell" làm mặc định. Xem câu trả lời itgala.xyz dưới đây.
Indy411

4
Nếu bạn muốn sử dụng phương pháp này, giá trị mặc định chính xác cho khóa đăng ký thực sự là "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -File "%1"%*nơi bạn có thể bao gồm tùy chọn -ExecutionPolicy unrestricted. Lưu ý thay đổi ở cuối lệnh cho phép 0 hoặc nhiều tham số được truyền vào tập lệnh PowerShell. Dấu ngoặc kép và khoảng cách xung quanh các dấu phần trăm phải chính xác như được hiển thị.
Glenn Slayden

2
Đối với giải pháp dòng lệnh thay vì chỉnh sửa sổ đăng ký, bạn có thể nhập loại ftype Microsoft.PowerShellScript.1=^"^%SystemRoot^%\System32\WindowsPowerShell\v1.0\powershell.exe^" -NoLogo -ExecutionPolicy Unrestricted -File ^"%1^" %*sẽ thực hiện tương tự.
Damian T.

21

Xin lưu ý rằng một trong những tính năng bảo mật của PowerShell là người dùng KHÔNG thể khởi chạy tập lệnh bằng một cú nhấp đúp. Sử dụng cẩn thận nếu bạn sửa đổi cài đặt này. Một sự thay thế có thể là gói kịch bản của bạn. Một số trình soạn thảo như PrimalScript có thể làm điều đó. Người dùng vẫn cần cài đặt PowerShell nhưng sau đó họ có thể bấm đúp vào exe. Và có vẻ như nhóm của bạn cần một chút giáo dục.


3
Đây là một tính năng bảo mật vì nó làm chậm tin tặc ít nhất vài phút cho đến khi họ tìm thấy một giải pháp thay thế!
MarcH

23
Đó là một tính năng bảo mật ngu ngốc và vô dụng. Bạn có thể chạy một lô bằng cách gấp đôi ckicling trên nó? Có, một exe? Đúng. Một VBScript? Đúng. Tôi không nhận ra lý do tại sao một kịch bản poweshell sẽ được coi là nguy hiểm hơn tất cả những kịch bản khác
Mauro F.

12
Tôi không biết về các bạn, nhưng tôi chắc chắn đã chạy một tập tin dơi trên máy tính sai trước khi bấm đúp. Với một cái gì đó có nghĩa là để tự động hóa quản trị, nó có ý nghĩa hoàn hảo để hạn chế điều đó.
chúa tể

1
Bạn có thể bấm đúp vào tệp EXE để tôi không thấy cách này giúp. Nhưng chắc chắn nhóm Powershell nhận thức được lập luận cơ bản này. Phải có nhiều hơn cho nó.
usr

1
Nếu bạn viết các tập lệnh "nguy hiểm" để thực thi và bạn không thêm quy trình xác nhận cơ bản ... Tôi cho rằng bạn thích sống nguy hiểm.
Romain Vincent

18

Điều này làm việc cho tôi trên Windows 10 và powershell 5.1:

  • nhấp chuột phải vào tệp .ps1
  • Mở với...
  • Chọn một ứng dụng khác
  • Sao chép vị trí của powershell.exe vào thanh địa chỉ (theo mặc định nó sẽ không hiển thị thư mục windows) tức là C: \ Windows \ System32 \ WindowsPowerShell \ v1.0
  • chọn powershell.exe
  • chọn "Luôn sử dụng ứng dụng này để mở tệp .ps1"
  • nhấn OK

2
Có lẽ bạn cần đặt chính sách thực thi trên máy chủ thành một cái gì đó hợp lý, ví dụ như RemoteSign
vizmi

4
Điều này đã được vài năm tuổi và không ai nghĩ về điều này cho đến nửa năm trước? - Tôi cũng đã làm điều này và nó hoạt động hoàn hảo, mặc dù bạn phải thực hiện thêm một số cấu hình hoặc powershell sẽ từ chối chạy bất kỳ tập lệnh .ps1 nào (xem Set-ExecutionPolicy).
DarkWiiPlayer

Có vẻ như tên tập lệnh cần không chứa khoảng trắng nếu bạn muốn nó hoạt động. Khác hơn là nó hoạt động hoàn hảo.
Lu-ca

2
Làm thế nào đây không phải là câu trả lời được bình chọn cao nhất? Tại sao chúng tôi sẽ chỉnh sửa sổ đăng ký trực tiếp hoặc sử dụng các tệp bó khi bạn có thể thực hiện theo cách Windows dự định, thông qua các liên kết tệp?
Tiến sĩ Kickass

@ Dr.Kickass Đây có lẽ là một trong những câu trả lời mới hơn tôi đoán
vizmi

17

Tôi đã viết cái này vài năm trước (chạy nó với quyền quản trị viên):

<#
.SYNOPSIS
    Change the registry key in order that double-clicking on a file with .PS1 extension
    start its execution with PowerShell.
.DESCRIPTION
    This operation bring (partly) .PS1 files to the level of .VBS as far as execution
    through Explorer.exe is concern.
    This operation is not advised by Microsoft.
.NOTES
    File Name   : ModifyExplorer.ps1
    Author      : J.P. Blanc - jean-paul_blanc@silogix-fr.com
    Prerequisite: PowerShell V2 on Vista and later versions.
    Copyright 2010 - Jean Paul Blanc/Silogix
.LINK
    Script posted on:
    http://www.silogix.fr
.EXAMPLE
    PS C:\silogix> Set-PowAsDefault -On
    Call Powershell for .PS1 files.
    Done!
.EXAMPLE
    PS C:\silogix> Set-PowAsDefault
    Tries to go back
    Done!
#>
function Set-PowAsDefault
{
  [CmdletBinding()]
  Param
  (
    [Parameter(mandatory=$false, ValueFromPipeline=$false)]
    [Alias("Active")]
    [switch]
    [bool]$On
  )

  begin
  {
    if ($On.IsPresent)
    {
      Write-Host "Call PowerShell for .PS1 files."
    }
    else
    {
      Write-Host "Try to go back."
    }
  }

  Process
  {
    # Text Menu
    [string]$TexteMenu = "Go inside PowerShell"

    # Text of the program to create
    [string] $TexteCommande = "%systemroot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command ""&'%1'"""

    # Key to create
    [String] $clefAModifier = "HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\Open\Command"

    try
    {
      $oldCmdKey = $null
      $oldCmdKey = Get-Item $clefAModifier -ErrorAction SilentlyContinue
      $oldCmdValue = $oldCmdKey.getvalue("")

      if ($oldCmdValue -ne $null)
      {
        if ($On.IsPresent)
        {
          $slxOldValue = $null
          $slxOldValue = Get-ItemProperty $clefAModifier -Name "slxOldValue" -ErrorAction SilentlyContinue
          if ($slxOldValue -eq $null)
          {
            New-ItemProperty $clefAModifier -Name "slxOldValue" -Value $oldCmdValue  -PropertyType "String" | Out-Null
            New-ItemProperty $clefAModifier -Name "(default)" -Value $TexteCommande  -PropertyType "ExpandString" | Out-Null
            Write-Host "Done !"
          }
          else
          {
            Write-Host "Already done!"
          }
        }
        else
        {
          $slxOldValue = $null
          $slxOldValue = Get-ItemProperty $clefAModifier -Name "slxOldValue" -ErrorAction SilentlyContinue
          if ($slxOldValue -ne $null)
          {
            New-ItemProperty $clefAModifier -Name "(default)" -Value $slxOldValue."slxOldValue"  -PropertyType "String" | Out-Null
            Remove-ItemProperty $clefAModifier -Name "slxOldValue"
            Write-Host "Done!"
          }
          else
          {
            Write-Host "No former value!"
          }
        }
      }
    }
    catch
    {
      $_.exception.message
    }
  }
  end {}
}

2
Tôi đã phải thay đổi nó tại vị trí này để nó hoạt động: Máy tính \ HKEY_CLASSES_ROOT \ Ứng dụng \ powershell.exe \ Shell \ Open \ Command. Tôi không hiểu đăng ký đủ để giải thích lý do tại sao. Có lẽ bởi vì tôi đang chạy Powershell 3.0? Dù sao, cảm ơn cho kịch bản.
Wouter

15

Bạn sẽ cần phải điều chỉnh registry. Đầu tiên, định cấu hình PSDrive cho HKEY_CLASSES_ROOT vì điều này không được thiết lập theo mặc định. Lệnh cho việc này là:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Giờ đây, bạn có thể điều hướng và chỉnh sửa các khóa và giá trị đăng ký trong HKEY_CLASSES_ROOT giống như bạn làm trong HKCU và HKLM PSDrive thông thường.

Để định cấu hình nhấp đúp để khởi chạy trực tiếp các tập lệnh PowerShell:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 0

Để định cấu hình nhấp đúp để mở tập lệnh PowerShell trong PowerShell ISE:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Edit'

Để khôi phục giá trị mặc định (đặt hai lần để mở tập lệnh PowerShell trong Notepad):

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'

Tôi đã thử khôi phục giá trị mặc định bằng cách sử dụng dòng cuối cùng từ ISE PowerShell Nâng cao, nhưng rõ ràng nếu bạn đã sử dụng lệnh như Thermionix mô tả thì nó thay thế Mặc định, vì vậy bạn phải đặt lại Shell.command một cách rõ ràng (nhưng tôi không tìm thấy cú pháp đúng cho điều đó vì vậy tôi đã phải đi qua Bảng điều khiển> Chương trình> Hiệp hội tệp).
dragon788

13

Tôi đồng ý rằng cài đặt cài đặt hệ thống có thể hơi nhiều, nhưng lối tắt yêu cầu đường dẫn được mã hóa cứng là không lý tưởng. Một tập tin bat thực sự giải quyết vấn đề độc đáo

RunMyPowershellScript.bat

 start powershell -command "& '.\MyPowershellScript.ps1' -MyArguments blah"

Bây giờ tệp bó này có thể được nhấp đúp vào, các phím tắt có thể dễ dàng được tạo cho tệp bó và tập lệnh có thể được triển khai vào bất kỳ thư mục nào.


Lưu ý bạn cần tập lệnh ps1 trong cùng thư mục với tập tin bat. Bạn có được khả năng sao chép dán với chi phí duy trì 2 tệp.
jiggunjer

11

Các lệnh PowerShell đơn giản để thiết lập điều này trong sổ đăng ký;

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Set-ItemProperty -Path "HKCR:\Microsoft.PowerShellScript.1\Shell\open\command" -name '(Default)' -Value '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"'

5
Để bảo mật hơn một chút, tôi khuyên bạn ExecutionPolicy RemoteSignednên sử dụng để một tập lệnh ngẫu nhiên được tải xuống từ mạng / internet (với siêu dữ liệu biểu thị nó không được tạo cục bộ) sẽ không thực hiện từ một cú nhấp chuột, nhưng bất kỳ tệp nào bạn đã tạo bằng cách sao chép và dán mã vào tệp .ps1 sẽ thực thi vì không có siêu dữ liệu đó được liên kết với nó.
dragon788

6
  1. Điều hướng REGEDIT đến HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Microsoft.PowerShellScript.1 \ Shell
  2. Trên khung bên phải, bấm đúp vào "(Mặc định)"
  3. Xóa giá trị hiện tại của "Mở" (khởi chạy Notepad) và nhập "0" (bằng 0, sẽ khởi chạy Powershell trực tiếp).

Hoàn nguyên giá trị nếu bạn muốn sử dụng Notepad làm mặc định một lần nữa.


5

Bạn có thể đặt liên kết tệp mặc định của ps1các tệp thành tệp powershell.exesẽ cho phép bạn thực thi tập lệnh powershell bằng cách nhấp đúp vào tập tin.

Trong Windows 10,

  1. Nhấp chuột phải vào một ps1tập tin
  2. Nhấp chuột Open with
  3. Nhấp chuột Choose another app
  4. Trong cửa sổ bật lên, chọn More apps
  5. Cuộn xuống phía dưới và chọn Look for another app on this PC.
  6. Duyệt đến và chọn C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
  7. Danh sách mục

Điều đó sẽ thay đổi liên kết tệp và ps1các tệp sẽ thực thi bằng cách nhấp đúp vào chúng. Bạn có thể thay đổi nó trở lại hành vi mặc định của nó bằng cách đặt notepad.exethành ứng dụng mặc định.

Nguồn


1
Điều này hoạt động tốt nhưng khá nhiều trùng lặp câu trả lời của vizmi.
Marteng

4

đặt một tệp .cmd đơn giản vào thư mục con của tôi với tệp .ps1 có cùng tên, vì vậy, ví dụ: tập lệnh có tên "foobar" sẽ có "foobar.ps1" và "foobar.cmd". Vì vậy, để chạy .ps1, tất cả những gì tôi phải làm là nhấp vào tệp .cmd từ explorer hoặc chạy .cmd từ dấu nhắc lệnh. Tôi sử dụng cùng tên cơ sở vì tệp .cmd sẽ tự động tìm kiếm .ps1 bằng tên riêng của nó.

::====================================================================
:: Powershell script launcher
::=====================================================================
:MAIN
    @echo off
    for /f "tokens=*" %%p in ("%~p0") do set SCRIPT_PATH=%%p
    pushd "%SCRIPT_PATH%"

    powershell.exe -sta -c "& {.\%~n0.ps1 %*}"

    popd
    set SCRIPT_PATH=
    pause

Pushd / popd cho phép bạn khởi chạy tệp .cmd từ dấu nhắc lệnh mà không phải thay đổi thư mục cụ thể nơi đặt các tập lệnh. Nó sẽ thay đổi thư mục script sau đó khi hoàn thành quay lại thư mục gốc.

Bạn cũng có thể tắt tạm dừng nếu bạn muốn cửa sổ lệnh biến mất khi tập lệnh kết thúc.

Nếu tập lệnh .ps1 của tôi có các tham số, tôi sẽ nhắc nhở chúng bằng các lời nhắc GUI bằng .NET Forms, nhưng cũng làm cho các tập lệnh đủ linh hoạt để chấp nhận tham số nếu tôi muốn chuyển chúng đi. Bằng cách này, tôi chỉ có thể nhấp đúp vào nó từ Explorer và không phải biết chi tiết về các tham số vì nó sẽ hỏi tôi những gì tôi cần, với hộp danh sách hoặc các biểu mẫu khác.


2
Cảm ơn các tập tin hàng loạt. Để bạn biết, bạn có thể thay thế câu lệnh "for" bằng: "set SCRIPT_PATH =% ~ p0" (không có dấu ngoặc kép). Trong thực tế, tôi sẽ sử dụng ~ dp0 thay vì ~ p0 để nó hoạt động trên các ổ đĩa. Tôi sẽ sử dụng cái này cho mình.
bảo vệ zumalififard

2

Điều này dựa trên câu trả lời của KoZm0kNoT. Tôi đã sửa đổi nó để làm việc trên các ổ đĩa.

@echo off
pushd "%~d0"
pushd "%~dp0"
powershell.exe -sta -c "& {.\%~n0.ps1 %*}"
popd
popd

Hai Pushd / popds là cần thiết trong trường hợp cwd của người dùng ở trên một ổ đĩa khác. Không có bộ ngoài, cwd trên ổ đĩa có tập lệnh sẽ bị mất.


2

Đây là những gì tôi sử dụng để chạy đoạn mã với tư cách quản trị viên theo mặc định:

Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-File """%1"""'}"

Bạn sẽ cần phải dán nó vào regedit làm giá trị mặc định cho:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command

Hoặc đây là một kịch bản sẽ làm điều đó cho bạn:

$hive = [Microsoft.Win32.RegistryKey]::OpenBaseKey('ClassesRoot', 'Default')
$key = $hive.CreateSubKey('Microsoft.PowerShellScript.1\Shell\Open\Command')
$key.SetValue($null, 'Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList ''-File """%1"""''}"')

2

Nếu bạn đã quen với quản trị Windows nâng cao, thì bạn có thể sử dụng gói ADM này (hướng dẫn được bao gồm trên trang đó) và cho phép chạy các tập lệnh PowerShell sau khi nhấp đúp qua mẫu này và GPO cục bộ. Sau này, bạn có thể chỉ cần thay đổi chương trình mặc định được liên kết với loại tệp .ps1 thành powershell.exe(sử dụng tìm kiếm, nó hoàn toàn bị bỏ qua) và bạn đã sẵn sàng để chạy các tập lệnh PowerShell với nhấp đúp chuột.

Mặt khác, tôi khuyên bạn nên gắn bó với các đề xuất khác vì bạn có thể làm rối tung toàn bộ hệ thống bằng các công cụ quản trị này.

Tôi nghĩ rằng các thiết lập mặc định là quá nghiêm ngặt. Nếu ai đó quản lý để đặt một số mã độc hại vào máy tính của bạn thì anh ấy / cô ấy cũng có thể bỏ qua hạn chế này (bọc nó vào tệp .cmd hoặc .exe, hoặc lừa bằng phím tắt) và tất cả những gì cuối cùng hoàn thành chỉ là để ngăn chặn bạn từ cách dễ dàng để chạy tập lệnh bạn đã viết.


Sau khi cài đặt, bạn có thể tìm thấy cài đặt này trong "Trình chỉnh sửa chính sách nhóm cục bộ" bên dưới: Chính sách máy tính cục bộ -> Cấu hình máy tính -> Mẫu quản trị -> Cấu phần Windows. Ở đó, bạn có thể kích hoạt nó và đảm bảo chọn một chính sách trong danh sách thả xuống được bật sau đó.
Wouter

1

Bạn có thể sử dụng chức năng 'SendTo' của Windows để giúp chạy tập lệnh PS1 dễ dàng hơn. Sử dụng phương pháp này, bạn có thể nhấp chuột phải vào tập lệnh PS1 và thực thi. Điều này không trả lời chính xác câu hỏi OP nhưng nó gần. Hy vọng, điều này hữu ích cho người khác. BTW .. điều này hữu ích cho một loạt các nhiệm vụ khác.

  • Xác định vị trí / Tìm kiếm Powershell.exe
  • Nhấp chuột phải vào Powershell.exe và chọn Open File Location
  • Nhấp chuột phải vào Powershell.exe và chọn Tạo Lối tắt. Tạm thời lưu một số nơi như máy tính để bàn của bạn
  • Bạn có thể muốn mở với tư cách Quản trị viên theo mặc định. Chọn Phím tắt> Thuộc tính> Nâng cao> Mở với tư cách Quản trị viên
  • Mở thư mục Sendto. Bắt đầu> Chạy> Shell: Gửi đến
  • Di chuyển phím tắt Powershell.exe vào thư mục Sendto
  • Bây giờ bạn có thể nhấp chuột phải vào tập lệnh PS1.
  • Nhấp chuột phải vào tệp PS1, Chọn tùy chọn bối cảnh SendTo> Chọn phím tắt Powershell
  • Kịch bản PS1 của bạn sẽ thực thi.

1
Làm thế nào điều này tốt hơn so với tùy chọn trình đơn ngữ cảnh 'Chạy với Powershell' mặc định?
elBradford

1

Tôi đã sử dụng cái này (chỉ cần chạy nó một lần); cũng đảm bảo bạn có quyền thực thi:

từ PowerShell với quyền nâng cao:

Set-ExecutionPolicy=RemoteSigned

sau đó từ một tập tin bat:

-----------------------------------------

 ftype Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -noexit ^&'%%1'

 assoc .ps1=Microsoft.PowerShellScript.1

-----------------------------------------
auto exit: remove -noexit 

và Voila; bấm đúp vào một * .ps1 sẽ thực thi nó.


The term '%1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
ajeh

Chỉ có sự kết hợp của câu trả lời được chấp nhận với câu trả lời này có hiệu quả với tôi, một khi tôi đã sử dụng lệnh từ câu trả lời được chấp nhận trong khóa đăng ký. Rõ ràng là chạy assoclà bắt buộc.
ajeh

@ajeh (xin lỗi vì bieng leet đến bữa tiệc. Nếu bạn gặp lỗi đó, đó là do bạn đã viết sai dấu ngoặc đơn. Hãy chắc chắn rằng bạn sử dụng UTF-8. )
Paul Fijma

1

Trong Windows 10, bạn cũng có thể muốn xóa ghi đè Windows Explorer cho liên kết mở rộng tệp:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ps1\UserChoice

ngoài sự HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\commandthay đổi được đề cập trong các câu trả lời khác.

Xem https://stackoverflow.com/a/2697804/1360907


1

Tôi đã thử các câu trả lời nhiều nhất cho câu hỏi này, nhưng gặp phải thông báo lỗi. Sau đó, tôi tìm thấy câu trả lời ở đây:

PowerShell nói rằng "việc thực thi các tập lệnh bị vô hiệu hóa trên hệ thống này."

Điều làm việc tốt cho tôi là sử dụng giải pháp này:

powershell -ExecutionPolicy Bypass -File script.ps1

Bạn có thể dán tệp đó vào tệp .bat và nhấp đúp vào tệp.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.