Saya mendistribusikan skrip PowerShell ke tim saya. Skripnya adalah untuk mengambil alamat IP dari klien Vsphere, membuat koneksi mstsc, dan memasukkannya ke dalam file bersama.
Saat mereka menggunakan skrip, mereka mengetahui alamat IP mesin. Setelah itu, mereka selalu cenderung menggunakan mstsc secara langsung daripada menjalankan skrip PowerShell. (Karena mereka menggunakan mstsc, saya tidak dapat mengetahui apakah mereka sering menggunakan VM atau tidak.)
Terutama mereka memberi tahu saya bahwa menjalankan PowerShell tidak langsung.
Saya muak dengan kemalasan mereka.
Apakah ada cara untuk membuat skrip PowerShell berfungsi dengan mengklik ganda file .ps1?
powershell
powershell-2.0
Samselvaprabu
sumber
sumber
Jawaban:
Buat pintasan dengan sesuatu seperti ini sebagai "Target":
powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"
sumber
-NoProfile
juga berguna, karena profil dapat melakukan semua hal yang tidak diharapkan skrip.Atau jika Anda ingin semua file PS1 berfungsi seperti file VBS, Anda dapat mengedit registri seperti ini:
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command
Edit nilai Default menjadi seperti ini ...
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"
Kemudian Anda cukup mengklik dua kali semua file .PS1 Anda seperti yang Anda inginkan. menurut pendapat saya, bisa keluar dari kotak.
Saya akan menyebutnya "The Powershell De-castration Hack". LOL nikmati!
sumber
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -File "%1"%*
tempat Anda dapat menyertakan file-ExecutionPolicy unrestricted
. Perhatikan perubahan di akhir perintah yang memungkinkan nol atau lebih parameter untuk diteruskan ke skrip PowerShell. Tanda kutip dan spasi di sekitar tanda persen harus persis seperti yang ditunjukkan.ftype Microsoft.PowerShellScript.1=^"^%SystemRoot^%\System32\WindowsPowerShell\v1.0\powershell.exe^" -NoLogo -ExecutionPolicy Unrestricted -File ^"%1^" %*
yang akan melakukan hal yang sama.Ini berfungsi untuk saya di Windows 10 dan PowerShell 5.1:
sumber
Set-ExecutionPolicy
).Ketahuilah bahwa salah satu fitur keamanan PowerShell adalah pengguna TIDAK dapat meluncurkan skrip dengan klik dua kali. Berhati-hatilah jika Anda mengubah pengaturan ini. Alternatifnya mungkin dengan mengemas skrip Anda. Beberapa editor seperti PrimalScript dapat melakukannya. Pengguna masih perlu menginstal PowerShell tetapi kemudian mereka dapat mengklik dua kali exe tersebut. Dan sepertinya tim Anda membutuhkan sedikit pendidikan.
sumber
Saya menulis ini beberapa tahun yang lalu (menjalankannya dengan hak administrator):
<# .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 - [email protected] 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 {} }
sumber
Anda harus mengubah registri. Pertama, konfigurasikan PSDrive untuk HKEY_CLASSES_ROOT karena ini tidak diatur secara default. Perintah untuk ini adalah:
Sekarang Anda dapat menavigasi dan mengedit kunci dan nilai registri di HKEY_CLASSES_ROOT seperti yang Anda lakukan di PSDrives HKCU dan HKLM biasa.
Untuk mengkonfigurasi klik dua kali untuk meluncurkan skrip PowerShell secara langsung:
Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 0
Untuk mengonfigurasi klik ganda untuk membuka skrip PowerShell di PowerShell ISE:
Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Edit'
Untuk memulihkan nilai default (setel klik dua kali untuk membuka skrip PowerShell di Notepad):
Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'
sumber
Saya setuju bahwa menyetel pengaturan sistem mungkin sedikit berlebihan, tetapi pintasan yang memerlukan jalur hardcode tidak ideal. File bat sebenarnya memecahkan masalah dengan baik
RunMyPowershellScript.bat
start powershell -command "& '.\MyPowershellScript.ps1' -MyArguments blah"
File batch ini sekarang dapat diklik dua kali, pintasan dapat dengan mudah dibuat ke file batch, dan skrip dapat diterapkan ke folder mana pun.
sumber
start powershell -command "& 'C:\Users\skripte\arbeitstage.ps1'"
Perintah PowerShell sederhana untuk mengatur ini di registri;
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"'
sumber
ExecutionPolicy RemoteSigned
agar skrip acak yang diunduh dari jaringan / internet (dengan metadata yang menunjukkan bahwa itu tidak dibuat secara lokal) tidak akan dijalankan dari klik dua kali, tetapi file apa pun yang telah Anda buat dengan menyalin dan menempelkan kode ke dalam file .ps1 akan dijalankan karena tidak ada metadata yang terkait dengannya.Kembalikan nilainya jika Anda ingin menggunakan Notepad sebagai default lagi.
sumber
Anda dapat mengatur asosiasi file default dari
ps1
file yang akanpowershell.exe
yang akan memungkinkan Anda untuk menjalankan script PowerShell dengan mengklik ganda di atasnya.Di Windows 10,
ps1
fileOpen with
Choose another app
More apps
Look for another app on this PC
.C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
.Itu akan mengubah asosiasi file dan
ps1
file file akan dieksekusi dengan mengklik dua kali. Anda dapat mengubahnya kembali ke perilaku default dengan menyetelnotepad.exe
ke aplikasi default.Sumber
sumber
letakkan file .cmd sederhana di subfolder saya dengan file .ps1 saya dengan nama yang sama, jadi, misalnya, skrip bernama "foobar" akan memiliki "foobar.ps1" dan "foobar.cmd". Jadi untuk menjalankan .ps1, yang harus saya lakukan adalah mengklik file .cmd dari explorer atau menjalankan .cmd dari command prompt. Saya menggunakan nama dasar yang sama karena file .cmd secara otomatis akan mencari .ps1 menggunakan namanya sendiri.
::==================================================================== :: 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 memungkinkan Anda meluncurkan file .cmd dari command prompt tanpa harus berpindah ke direktori tertentu tempat skrip berada. Ini akan berubah ke direktori script kemudian setelah selesai kembali ke direktori asli.
Anda juga dapat menonaktifkan jeda jika ingin jendela perintah menghilang saat skrip selesai.
Jika skrip .ps1 saya memiliki parameter, saya meminta mereka dengan petunjuk GUI menggunakan .NET Forms, tetapi juga membuat skrip cukup fleksibel untuk menerima parameter jika saya ingin meneruskannya. Dengan cara ini saya hanya dapat mengklik dua kali dari Explorer dan tidak perlu mengetahui detail parameter karena akan menanyakan apa yang saya butuhkan, dengan kotak daftar atau formulir lainnya.
sumber
Jika Anda terbiasa dengan administrasi Windows tingkat lanjut, maka Anda dapat menggunakan paket ADM ini (petunjuk disertakan di halaman itu) dan mengizinkan menjalankan skrip PowerShell setelah mengklik dua kali melalui template ini dan Local GPO. Setelah ini, Anda cukup mengubah program default yang terkait dengan jenis file .ps1 menjadi
powershell.exe
(gunakan pencarian, ini cukup disimpan) dan Anda siap untuk menjalankan skrip PowerShell dengan klik dua kali.Jika tidak, saya akan merekomendasikan untuk tetap menggunakan saran lain karena Anda dapat mengacaukan seluruh sistem dengan alat administrasi ini.
Saya pikir pengaturan default terlalu ketat. Jika seseorang berhasil meletakkan beberapa kode berbahaya di komputer Anda maka dia juga dapat melewati batasan ini (membungkusnya ke dalam file .cmd atau .exe, atau trik dengan pintasan) dan semua yang pada akhirnya diselesaikannya hanya untuk mencegah Anda dari cara mudah menjalankan skrip yang Anda tulis.
sumber
Ini didasarkan pada jawaban KoZm0kNoT. Saya memodifikasinya untuk bekerja lintas drive.
@echo off pushd "%~d0" pushd "%~dp0" powershell.exe -sta -c "& {.\%~n0.ps1 %*}" popd popd
Dua pushd / popds diperlukan jika cwd pengguna berada di drive yang berbeda. Tanpa set luar, cwd pada drive dengan skrip akan hilang.
sumber
Inilah yang saya gunakan agar skrip dijalankan sebagai admin secara default:
Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-File """%1"""'}"
Anda harus menempelkannya ke regedit sebagai nilai default untuk:
Atau inilah skrip yang akan melakukannya untuk Anda:
$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"""''}"')
sumber
Saya mencoba jawaban teratas untuk pertanyaan ini, tetapi menemukan pesan kesalahan. Kemudian saya menemukan jawabannya di sini:
PowerShell mengatakan "eksekusi skrip dinonaktifkan di sistem ini."
Apa yang berhasil bagi saya adalah menggunakan solusi ini:
Anda dapat menempelkannya ke file .bat dan klik dua kali di atasnya.
sumber
Anda dapat menggunakan fungsionalitas 'SendTo' Windows untuk membuat skrip PS1 berjalan lebih mudah. Dengan menggunakan metode ini, Anda dapat mengklik kanan pada skrip PS1 dan menjalankannya. Ini tidak benar-benar menjawab pertanyaan OP tetapi hampir. Semoga bermanfaat bagi sesama. BTW .. ini berguna untuk berbagai tugas lainnya.
sumber
Saya menggunakan ini (hanya perlu menjalankannya sekali); juga pastikan Anda memiliki hak untuk mengeksekusi:
dari PowerShell dengan hak yang lebih tinggi:
lalu dari file bat:
----------------------------------------- ftype Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -noexit ^&'%%1' assoc .ps1=Microsoft.PowerShellScript.1 ----------------------------------------- auto exit: remove -noexit
dan voila; mengklik dua kali * .ps1 akan menjalankannya.
sumber
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.
assoc
diperlukan.Di Windows 10 Anda mungkin juga ingin menghapus override Windows Explorer untuk asosiasi ekstensi file:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ps1\UserChoice
selain
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command
perubahan yang disebutkan dalam jawaban lain.Lihat https://stackoverflow.com/a/2697804/1360907
sumber
Dari http://www.howtogeek.com/204166/how-to-configure-windows-to-work-with-powershell-scripts-more-easily :
Tetapkan nilai default untuk
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell
ke0
sumber