Anda tahu bagaimana jika Anda adalah pengguna administratif suatu sistem dan Anda dapat mengklik kanan mengatakan, skrip batch dan menjalankannya sebagai Administrator tanpa memasukkan kata sandi administrator?
Saya ingin tahu bagaimana melakukan ini dengan skrip PowerShell. Saya tidak mau harus memasukkan kata sandi saya; Saya hanya ingin meniru klik kanan metode Run As Administrator .
Semua yang saya baca sejauh ini mengharuskan Anda untuk memberikan kata sandi administrator.
powershell
administrator
chrips
sumber
sumber
gsudo
. Sudo open-source gratis untuk windows yang memungkinkan untuk dieksekusi sebagai admin dari baris perintah. Pop-up UAC akan muncul.Jawaban:
Jika konsol saat ini tidak ditinggikan dan operasi yang Anda coba lakukan memerlukan hak yang lebih tinggi maka Anda dapat memulai PowerShell dengan Run as administratoropsi:
sumber
start-process -verb runAs "<cmd>" -argumentlist "<args1> <args2>"
;)Win
+X
Seperti yang Dibahas Di SiniIni adalah tambahan saran Shay Levi (cukup tambahkan baris ini di awal skrip):
Ini menghasilkan skrip saat ini diteruskan ke proses PowerShell baru dalam mode Administrator (jika Pengguna saat ini memiliki akses ke mode Administrator dan skrip tidak diluncurkan sebagai Administrator).
sumber
if (-not (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
if
pernyataan dan letakkanthrow
di dalam blok itu.if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
[Security.Principal.WindowsBuiltInRole]::Administrator)
) harus lebih disukai daripada argumen string"Administrator"
- Saya menemukan lingkungan yangSkrip PowerShell yang terangkat sendiri
Windows 8.1 / PowerShell 4.0 +
Satu baris :)
sumber
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" `"$args`"" -Verb RunAs; exit }
Benjamin Armstrong memposting artikel yang bagus tentang skrip PowerShell yang bisa meningkatkan diri sendiri . Ada beberapa masalah kecil dengan kodenya; versi modifikasi berdasarkan perbaikan yang disarankan dalam komentar di bawah ini.
Pada dasarnya itu mendapatkan identitas yang terkait dengan proses saat ini, memeriksa apakah itu adalah administrator, dan jika tidak, menciptakan proses PowerShell baru dengan hak istimewa administrator dan mengakhiri proses yang lama.
sumber
$newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory
Anda bisa membuat file batch (
*.bat
) yang menjalankan skrip PowerShell Anda dengan hak administratif ketika diklik dua kali. Dengan cara ini, Anda tidak perlu mengubah apa pun di skrip PowerShell Anda . Untuk melakukannya, buat file batch dengan nama dan lokasi skrip PowerShell yang sama dan kemudian masukkan konten berikut di dalamnya:Itu dia!
Berikut penjelasannya:
Dengan asumsi skrip powershell Anda ada di path
C:\Temp\ScriptTest.ps1
, file batch Anda harus memiliki pathC:\Temp\ScriptTest.bat
. Ketika seseorang mengeksekusi file batch ini, langkah-langkah berikut akan terjadi:Cmd akan menjalankan perintah
Sesi PowerShell baru akan terbuka dan perintah berikut akan dieksekusi:
Sesi PowerShell baru lainnya dengan hak administratif akan terbuka di
system32
folder dan argumen berikut akan diteruskan ke sana:Perintah berikut akan dieksekusi dengan hak administratif:
Setelah alur skrip dan argumen nama dikutip ganda, mereka dapat berisi spasi atau karakter tanda kutip tunggal (
'
).Folder saat ini akan berubah dari
system32
menjadiC:\Temp
dan skripScriptTest.ps1
akan dieksekusi. Setelah parameter-NoExit
dilewati, jendela tidak akan ditutup, bahkan jika skrip PowerShell Anda melemparkan beberapa pengecualian.sumber
sudo
perintah dan mengkonfigurasi pengguna yang Anda gunakan untuk proses otomatisNOPASSWD: ALL
dalamsudoers
file .Berikut cuplikan self-elevating untuk skrip Powershell yang mempertahankan direktori kerja :
Mempertahankan direktori kerja penting untuk skrip yang melakukan operasi relatif jalur. Hampir semua jawaban lain tidak mempertahankan jalur ini, yang dapat menyebabkan kesalahan tak terduga di sisa skrip.
Jika Anda lebih suka tidak menggunakan skrip self-elevating / snippet, dan sebaliknya hanya ingin cara mudah untuk meluncurkan skrip sebagai adminstrator (mis. Dari menu konteks Explorer), lihat jawaban saya yang lain di sini: https: // stackoverflow .com / a / 57033941/2441655
sumber
Menggunakan
#Requires -RunAsAdministrator
belum dinyatakan. Tampaknya sudah ada sejak PowerShell 4.0.
http://technet.microsoft.com/en-us/library/hh847765.aspx
Bagi saya, ini sepertinya cara yang baik untuk membahas hal ini, tetapi saya belum yakin dengan pengalaman di lapangan. Runtime PowerShell 3.0 mungkin mengabaikan ini, atau bahkan lebih buruk, memberikan kesalahan.
Ketika skrip dijalankan sebagai non-administrator, kesalahan berikut diberikan:
sumber
Parameter RunAsAdministrator requires an argument
. @akauppi Saya tidak yakin mereka selalu berpikir.Anda dapat dengan mudah menambahkan beberapa entri registri untuk mendapatkan menu konteks "Jalankan sebagai administrator" untuk
.ps1
file:(diperbarui ke skrip sederhana dari @Shay)
Pada dasarnya
HKCR:\Microsoft.PowershellScript.1\Shell\runas\command
atur nilai default untuk menjalankan script menggunakan Powershell.sumber
(default)
bagian itu?"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
Kode yang diposting oleh Jonathan dan Shay Levy tidak berfungsi untuk saya.
Temukan kode kerja di bawah ini:
sumber
Anda perlu menjalankan kembali skrip dengan hak administratif dan memeriksa apakah skrip diluncurkan dalam mode itu. Di bawah ini saya telah menulis skrip yang memiliki dua fungsi: DoElevatedOperations dan DoStandardOperations . Anda harus menempatkan kode Anda yang memerlukan hak admin ke yang pertama dan operasi standar ke yang kedua. The IsRunAsAdmin variabel digunakan untuk mengidentifikasi mode admin.
Kode saya adalah ekstrak yang disederhanakan dari skrip Microsoft yang secara otomatis dihasilkan ketika Anda membuat paket aplikasi untuk aplikasi Windows Store.
sumber
Menambahkan 2 sen saya. Versi sederhana saya berdasarkan sesi net yang berfungsi sepanjang waktu di Windows 7 / Windows 10. Mengapa terlalu rumit?
tambahkan saja ke bagian atas skrip dan itu akan berjalan sebagai administrator.
sumber
if (!(net session 2>&1 | Out-Null)) { ...
@ycomp... } else { echo "your message" }
.cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
, Anda dapat mengaturnya kebypass
Tapibypass
mungkin berbahaya. Atur keAllSigned
Perilaku ini adalah dengan desain. Ada beberapa lapisan keamanan karena Microsoft benar-benar tidak ingin file .ps1 menjadi virus email terbaru. Beberapa orang menemukan ini bertentangan dengan gagasan otomatisasi tugas, yang adil. Model keamanan Vista + adalah untuk "mendeotomatisasi" hal-hal, sehingga membuat pengguna oke saja.
Namun, saya curiga jika Anda meluncurkan PowerShell sebagai peningkatan, itu seharusnya dapat menjalankan file batch tanpa meminta kata sandi lagi sampai Anda menutup PowerShell.
sumber
Anda juga dapat memaksa aplikasi untuk membuka sebagai administrator, jika Anda memiliki akun administrator, tentu saja.
Temukan file, klik kanan> properties> Shortcut> Advanced dan centang Run as Administrator
Kemudian Klik OK.
sumber
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
adalah tempat pintasan PowerShell berada. Itu juga masih pergi ke lokasi yang berbeda untuk memanggil 'exe' yang sebenarnya (%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
).Karena PowerShell digerakkan oleh profil pengguna ketika ada izin terkait; jika nama pengguna / profil Anda memiliki izin untuk melakukan sesuatu maka di bawah profil itu, di PowerShell Anda pada umumnya akan dapat melakukannya juga. Karena itu, masuk akal bahwa Anda akan mengubah pintasan yang terletak di bawah profil pengguna Anda, misalnya
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
,.Klik kanan dan klik properti. Klik tombol "Advanced" di bawah tab "Shortcut" yang terletak tepat di bawah bidang teks "Komentar" yang berdekatan di sebelah kanan dua tombol lainnya, "Buka Lokasi File" dan "Ubah Ikon".
Centang kotak yang bertuliskan, "Jalankan sebagai Administrator". Klik OK, lalu Applydan OK. Sekali lagi klik kanan ikon berlabel 'Windows PowerShell' yang terletak di
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
dan pilih "Pin to Start Menu / Taskbar".Sekarang setiap kali Anda mengklik ikon itu, itu akan memanggil UAC untuk eskalasi. Setelah memilih 'YA', Anda akan melihat konsol PowerShell terbuka dan akan diberi label "Administrator" di bagian atas layar.
Untuk melangkah lebih jauh ... Anda bisa mengklik kanan ikon pintasan yang sama di lokasi profil Windows PowerShell Anda dan menetapkan pintasan keyboard yang akan melakukan hal yang persis sama seolah-olah Anda mengklik ikon yang baru ditambahkan. Jadi di mana dikatakan "Shortcut Key" dimasukkan ke dalam kombinasi tombol keyboard / tombol seperti: Ctrl+ Alt+ P P(untuk PowerShell) . Klik Applydan OK.
Sekarang yang harus Anda lakukan adalah menekan kombinasi tombol yang Anda tetapkan dan Anda akan melihat UAC dipanggil, dan setelah Anda memilih 'YA' Anda akan melihat konsol PowerShell muncul dan "Administrator" ditampilkan pada bilah judul.
sumber
Saya telah menemukan cara untuk melakukan ini ...
Buat file batch untuk membuka skrip Anda:
Kemudian buat pintasan, di desktop Anda ucapkan (klik kanan Baru -> Pintasan ).
Kemudian tempel ini ke lokasi:
Saat pertama kali dibuka, Anda harus memasukkan kata sandi sekali. Ini kemudian akan menyimpannya di manajer kredensial Windows.
Setelah ini, Anda kemudian dapat menjalankan sebagai administrator tanpa harus memasukkan nama pengguna atau kata sandi administrator.
sumber
Masalah dengan jawaban @pgk dan @Andrew Odri adalah ketika Anda memiliki parameter skrip, khususnya ketika itu wajib. Anda dapat memecahkan masalah ini menggunakan pendekatan berikut:
Berikut adalah bagaimana kode jika skrip memiliki parameter wajib ComputerName dan Port :
sumber
Sejumlah jawaban di sini dekat, tetapi sedikit lebih banyak pekerjaan daripada yang dibutuhkan.
Buat pintasan ke skrip Anda dan konfigurasikan ke "Run as Administrator":
Properties...
Target
dari<script-path>
hinggapowershell <script-path>
Run as administrator
sumber
Solusi lain yang lebih sederhana adalah Anda juga dapat mengklik kanan pada "C: \ Windows \ System32 \ cmd.exe" dan pilih "Run as Administrator" maka Anda dapat menjalankan aplikasi apa pun sebagai administrator tanpa memberikan kata sandi apa pun.
sumber
Saya menggunakan solusi di bawah ini. Ini menangani stdout / stderr melalui fitur transkrip dan melewati kode keluar dengan benar ke proses induk. Anda perlu menyesuaikan jalur transkrip / nama file.
sumber
Berikut adalah cara menjalankan perintah powershell tinggi dan mengumpulkan formulir output dalam file batch windows dalam satu perintah (yaitu tidak menulis skrip powershell ps1).
Di atas Anda melihat saya pertama kali meluncurkan PowerShell dengan prompt yang ditinggikan dan kemudian meminta untuk meluncurkan PowerShell lain (sub shell) untuk menjalankan perintah.
sumber
Di atas jawaban Shay Levy, ikuti pengaturan di bawah ini (hanya sekali)
PATH
folder, misalnya. Folder Windows \ System32Setelah pengaturan:
powershell Start-Process powershell -Verb runAs <ps1_file>
Anda sekarang dapat menjalankan semuanya hanya dalam satu baris perintah. Di atas berfungsi pada Windows 8 Basic 64-bit.
sumber
Cara paling tepercaya yang saya temukan adalah membungkusnya dengan file .bat yang dapat berdiri sendiri:
.Bat memeriksa apakah Anda sudah menjadi admin dan meluncurkan kembali skrip sebagai Administrator jika diperlukan. Itu juga mencegah jendela "cmd" yang asing dari membuka dengan parameter ke-4
ShellExecute()
diatur ke0
.sumber
EXIT
menjadiGOTO :EOF
dan menghapus yang kedua. Juga,cd %~dp0
haruscd /d %~dp0
DAN ditempatkan perintah pertama setelah@echo off
. Dengan cara ini Anda tidak perlu jalur absolut dari.ps1
keduanya, cukup letakkan di folder yang sama dengan.bat
. Jika Anda perlu melihat hasilnya, ubah parameter ke-4 menjadi1
.mshta
perintahnya?cmd
proses panggilan sehingga itu tidak "memperbaiki" itu, tapi saya senang Anda bisa memodifikasinya sesuai dengan kebutuhan Anda.cmd
(saya tidak). Tetapi mengenai perubahan lain, saya pikir ini adalah perbaikan karena versi saya akan bekerja untuk kami berdua sementara Anda tidak untuk saya, yaitu milik saya lebih umum (membahas skenario drive yang berbeda). Bagaimanapun, pendekatan yang sangat cerdas.Saya belum pernah melihat cara saya melakukannya sebelumnya, jadi, coba ini. Cara ini lebih mudah diikuti dan memiliki jejak yang jauh lebih kecil:
Sederhananya, jika sesi Powershell saat ini dipanggil dengan hak administrator, SID Grup Administrator yang terkenal akan muncul di Grup saat Anda mengambil identitas saat ini. Sekalipun akun tersebut adalah anggota grup itu, SID tidak akan muncul kecuali prosesnya dilakukan dengan kredensial yang ditingkatkan.
Hampir semua jawaban ini adalah variasi dari metode Microsoft Ben Armstrong yang sangat populer tentang cara mencapainya, tetapi tidak benar-benar memahami apa yang sebenarnya dilakukan dan bagaimana cara meniru persaingan yang sama.
sumber
Untuk menambahkan output perintah ke nama file teks yang mencakup tanggal saat ini Anda dapat melakukan sesuatu seperti ini:
sumber
Ini adalah klarifikasi ...
Kredensial RUNAS / SAVECRED PowerShell "tidak aman", mencobanya dan menambah identitas admin dan kata sandi ke dalam cache kredensial dan dapat digunakan di tempat lain OOPS !. Jika Anda telah melakukan ini, saya sarankan Anda memeriksa dan menghapus entri.
Tinjau program atau kode Anda karena kebijakan Microsoft adalah Anda tidak dapat memiliki kode pengguna dan admin yang dicampur dalam gumpalan kode yang sama tanpa UAC (titik masuk) untuk menjalankan program sebagai admin. Ini akan menjadi sudo (hal yang sama) di Linux.
UAC memiliki 3 jenis, janganlihat, prompt atau titik masuk yang dihasilkan dalam manifes program. Itu tidak meningkatkan program jadi jika tidak ada UAC dan perlu admin itu akan gagal. Meskipun UAC sebagai persyaratan administrator baik, ia mencegah eksekusi kode tanpa otentikasi dan mencegah skenario kode campuran dieksekusi di tingkat pengguna.
sumber
Ternyata itu terlalu mudah. Yang harus Anda lakukan adalah menjalankan cmd sebagai administrator. Kemudian ketik
explorer.exe
dan tekan enter. Itu membuka Windows Explorer . Sekarang klik kanan pada skrip PowerShell yang ingin Anda jalankan, pilih "jalankan dengan PowerShell" yang akan meluncurkannya di PowerShell dalam mode administrator.Ini mungkin meminta Anda untuk mengaktifkan kebijakan untuk menjalankan, ketik Y dan tekan enter. Sekarang skrip akan berjalan di PowerShell sebagai administrator. Jika semuanya berjalan merah, itu berarti kebijakan Anda belum berpengaruh. Kemudian coba lagi dan itu akan berfungsi dengan baik.
sumber