programing

.ps1 파일을 더블 클릭하여 PowerShell 스크립트를 실행하는 방법이 있습니까?

showcode 2023. 4. 10. 22:23
반응형

.ps1 파일을 더블 클릭하여 PowerShell 스크립트를 실행하는 방법이 있습니까?

PowerShell 스크립트를 팀에 배포하고 있습니다.이 스크립트는 Vsphere 클라이언트에서 IP 주소를 가져와 mstsc 연결을 설정한 후 공유 파일에 기록하는 것입니다.

스크립트를 사용하는 순간 머신의 IP 주소를 알게 되었습니다.그 이후에는 PowerShell 스크립트를 실행하는 대신 항상 직접 mstsc를 사용하는 경향이 있습니다.(MSTSC를 사용하고 있기 때문에 VM을 자주 사용하는지 여부를 알 수 없습니다.)

주로 PowerShell을 실행하는 것은 간단하지 않다고 말합니다.

나는 그들의 게으름에 넌더리가 난다.

.ps1 파일을 더블 클릭하여 PowerShell 스크립트를 실행하는 방법이 있습니까?

다음과 같은 숏컷을 "Target(대상)"으로 만듭니다.

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

또, 모든 PS1 파일이 VBS 파일과 같이 동작하도록 하려면 , 다음과 같이 레지스트리를 편집할 수 있습니다.

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

기본값을 다음과 같이 편집합니다.

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

그런 다음 모든 을 더블 클릭하기만 하면 됩니다.PS1 파일은 당신이 원하는 대로입니다.소견으로는, 개봉할 수 있을 것 같습니다.

'파워셸 거세해크'라고 하겠습니다. LOL 즐겨주세요!

Windows 10 및 powershell 5.1에서는 이 기능이 동작했습니다.

  • .ps1 파일을 오른쪽 클릭합니다.
  • 열기...
  • 다른 앱 선택
  • powershell.exe 위치를 주소 표시줄에 복사합니다(기본적으로는 Windows 폴더는 표시되지 않습니다). (C:\Windows\)시스템32\Windows PowerShell\v1.0
  • powershell.exe 선택
  • "항상 이 앱을 사용하여 .ps1 파일을 엽니다"를 선택합니다.
  • [확인] 을 클릭합니다.

PowerShell의 보안 기능 중 하나는 사용자가 더블 클릭으로 스크립트를 시작할 수 없다는 것입니다.이 설정을 변경하는 경우는, 매우 주의해 주세요.다른 방법으로 스크립트를 패키징할 수 있습니다.PrimalScript와 같은 일부 편집자는 이를 수행할 수 있습니다.사용자는 여전히 PowerShell을 설치해야 하지만 exe를 두 번 클릭할 수 있습니다.그리고 너희 팀은 약간의 교육이 필요한 것 같아.

시스템 설정에는 다소 무리가 있을 수 있지만 하드코드 패스가 필요한 숏컷은 이상적이지 않습니다.배트 파일을 사용하면 실제로 문제를 잘 해결할 수 있습니다.

My Powershell Script를 실행합니다.박쥐

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

이제 이 배치 파일을 더블 클릭할 수 있고 배치 파일에 대한 바로 가기를 쉽게 만들 수 있으며 스크립트를 모든 폴더에 배포할 수 있습니다.

몇 년 전에 작성했습니다(관리자 권한으로 실행).

<#
.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 {}
}

레지스트리를 수정해야 합니다.먼저 PSDrive는 기본적으로 설정되어 있지 않으므로 HKEY_CLASSES_ROOT용으로 설정합니다.이 명령어는 다음과 같습니다.

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

이제 일반 HKCU 및 HKLM PSDrive와 마찬가지로 HKEY_CLASSES_ROOT에서 레지스트리 키 및 값을 탐색 및 편집할 수 있습니다.

더블클릭을 구성하여 PowerShell 스크립트를 직접 시작하려면:

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

PowerShell ISE에서 PowerShell 스크립트를 열도록 더블클릭을 구성하려면 다음 절차를 수행합니다.

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

기본값으로 되돌리려면(메모장에서 PowerShell 스크립트를 두 번 클릭하여 열도록 설정):

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

레지스트리에서 이를 설정하기 위한 간단한 PowerShell 명령어

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"'

은, 「」로 설정할 수.ps1 " " " " 입니다.powershell.exe파워셸

Windows 10 에서는,

  1. [ ] 를 합니다.ps1
  2. [ ] 를 합니다.Open with
  3. [ ] 를 합니다.Choose another app
  4. [ ]를 합니다.More apps
  5. 로 스크롤하여 을 합니다.Look for another app on this PC
  6. 하여 선택합니다.C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  7. 목록 항목

과 파일 어소시에이션이 됩니다.ps1파일을 두 번 클릭하면 파일이 실행됩니다. 수 .notepad.exe기본 앱으로 이동합니다.

원천

이 질문에 대한 상위 답변을 시도했지만 오류 메시지가 발생했습니다.그리고 나는 여기서 답을 찾았다.

PowerShell에서 "이 시스템에서 스크립트 실행이 비활성화되었습니다."라고 표시됩니다.

이 솔루션을 사용하는 것이 효과적이었습니다.

powershell -ExecutionPolicy Bypass -File script.ps1

이 파일을 .bat 파일에 붙여넣고 더블클릭할 수 있습니다.

UNIX shar(쉘 아카이브)와 같은 정신의 솔루션.

는 powershell이 수 ..cmd 「」( 「」)의 표시).ps1에 붙입니다.

@echo off
Rem Make powershell read this file, skip a number of lines, and execute it.
Rem This works around .ps1 bad file association as non executables.
PowerShell -Command "Get-Content '%~dpnx0' | Select-Object -Skip 5 | Out-String | Invoke-Expression"
goto :eof
# Start of PowerShell script here

예를 들어, "foobar"라는 이름의 스크립트는 "foobar.ps1"과 "foobar.snow"를 가집니다.따라서 .ps1을 실행하려면 탐색기에서 .cmd 파일을 클릭하거나 명령 프롬프트에서 .cmd를 실행하면 됩니다..cmd 파일이 자신의 이름을 사용하여 자동으로 .ps1을 검색하기 때문에 동일한 기본 이름을 사용합니다.

::====================================================================
:: 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를 사용하면 스크립트가 있는 특정 디렉토리로 변경하지 않고 명령어프롬프트에서 .cmd 파일을 시작할 수 있습니다.스크립트 디렉토리로 변경되어 완료되면 원래 디렉토리로 돌아갑니다.

스크립트가 완료될 때 명령 창을 닫으려면 일시 중지할 수도 있습니다.

.ps1 스크립트에 파라미터가 있는 경우 를 사용하여 GUI 프롬프트를 표시합니다.NET Forms를 사용할 수 있습니다.또한 스크립트를 유연하게 설정하여 매개 변수를 전달할 수 있습니다.이렇게 하면 탐색기에서 두 번 클릭하기만 하면 목록 상자나 다른 양식과 함께 필요한 정보를 묻는 메시지가 표시되므로 자세한 매개 변수를 알 필요가 없습니다.

  1. REGEDIT를 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\로 이동합니다.마이크로소프트(MS.PowerShell Script.1\셸
  2. 오른쪽 창에서 "(기본값)을 두 번 클릭합니다.
  3. 기존 값인 "Open"(메모장을 기동)을 삭제하고 "0"(Powershell을 직접 기동하는 0)을 입력합니다.

메모장을 기본값으로 다시 사용하려면 값을 되돌립니다.

고급 Windows 관리에 익숙한 경우 이 ADM 패키지(해당 페이지에 지침이 포함되어 있음)를 사용하여 이 템플릿과 로컬 GPO를 통해 더블클릭한 후 PowerShell 스크립트를 실행할 수 있습니다.이 후 .ps1 파일타입에 관련된 기본 프로그램을 변경하여powershell.exe(검색 사용, 매우 저장됨) 그러면 PowerShell 스크립트를 더블클릭으로 실행할 수 있습니다.

그렇지 않으면 이러한 관리 도구로 시스템 전체가 엉망이 될 수 있으므로 다른 제안을 계속 사용할 것을 권장합니다.

디폴트 설정이 너무 엄격한 것 같아요.만약 누군가가 당신의 컴퓨터에 어떤 악성코드를 넣었을 경우, 그/그녀는 이 제한을 회피할 수 있습니다(이 제한을 .cmd 파일이나 .exe로 압축하거나 단축키를 사용하여 트릭하는 것).결국 이 제한은 당신이 작성한 스크립트를 쉽게 실행할 수 없게 하는 것 뿐입니다.

  • 나의 해결책 2022가 있다.

  • "PowerShell-7.2.2-win-x64.msi"를 설치합니다.

  • file.ps1을 오른쪽 클릭하여 "pwsh"를 지정하여 exec으로 변경합니다.

파워셸 레지스트리 해킹과 정책 우회로는 통하지 않았다.여기에 이미지 설명 입력

이것은 KoZm0kNoT의 답변에 근거하고 있습니다.여러 드라이브에서 작동하도록 수정했습니다.

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

사용자의 cwd가 다른 드라이브에 있는 경우 두 개의 pushd/popd가 필요합니다.외부 설정이 없으면 스크립트가 있는 드라이브의 cwd가 손실됩니다.

디폴트로는 스크립트가 admin으로 실행되도록 하기 위해 다음과 같이 사용합니다.

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

이를 regedit에 기본값으로 붙여넣어야 합니다.

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

또는 다음 스크립트가 도움이 됩니다.

$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"""''}"')

이것을 사용했습니다(한 번만 실행해야 합니다).또한 실행할 권한이 있는지 확인합니다.

PowerShell에서 권한 상승:

Set-ExecutionPolicy=RemoteSigned

배트 파일에서 다음 작업을 수행합니다.

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

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

 assoc .ps1=Microsoft.PowerShellScript.1

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

및 voila. *.ps1을 두 번 클릭하면 실행됩니다.

Windows 10 에서는, Windows 탐색기의 파일 확장자 접속의 덮어쓰기를 삭제할 수도 있습니다.

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

에 덧붙여HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command다른 답변에서 언급된 변경 사항.

https://stackoverflow.com/a/2697804/1360907 를 참조해 주세요.

를 작성하는 것만으로 간단하게 할 수 있습니다.BAT 파일을 작성하여 다음 위치에 명령어를 입력합니다.

powershell ./generate-strings-table-en.ps1
powershell ./generate-conjoined-tables-it.ps1

그런 다음 해당 BAT 파일을 두 번 클릭합니다.

Windows 의 「Send To」기능을 사용하면, PS1 스크립트를 간단하게 실행할 수 있습니다.이 방법을 사용하면 PS1 스크립트를 오른쪽 클릭하여 실행할 수 있습니다.이것은 OP 질문에 정확히 답하지는 않지만 가깝습니다.이게 다른 사람들에게 도움이 됐으면 좋겠네요. 그런데..이것은 다양한 다른 작업에 도움이 됩니다.

  • Powershell.exe를 검색/검색합니다.
  • Powershell.exe 우클릭 후 [파일 위치 열기]를 선택합니다.
  • Powershell.exe 우클릭 후 [Create Shortcut]를 선택합니다.데스크톱과 같은 장소를 임시로 저장하다
  • 기본적으로 Admin으로 열 수 있습니다.[바로가기] > [속성]> [상세설정]> [관리자로서 열기]를 선택합니다.
  • Sendto 폴더를 엽니다.[ Start ] > [ Run ]> [ Shell ] :센토
  • Powershell.exe 바로 가기를 Sendto 폴더로 이동합니다.
  • 이것으로 PS1 스크립트를 오른쪽 클릭할 수 있게 됩니다.
  • PS1 파일을 오른쪽 클릭하여 [Send To]콘텍스트 옵션 선택> [ Powershell 숏컷 선택]
  • PS1 스크립트가 실행됩니다.

http://www.howtogeek.com/204166/how-to-configure-windows-to-work-with-powershell-scripts-more-easily 에서 :

의 기본값을 설정합니다.HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell로.0

언급URL : https://stackoverflow.com/questions/10137146/is-there-a-way-to-make-a-powershell-script-work-by-double-clicking-a-ps1-file

반응형