powershell betiğini yönetici olarak çalıştırma


56

Windows 7 Masaüstünde, yönetici ayrıcalıklarına ihtiyaç duyan script.ps1 var (bir hizmeti başlatıyor). Bu betiğe tıklamak ve yönetici ayrıcalıkları ile çalıştırmak istiyorum.

Bunu başarmanın en kolay yolu nedir?

Yanıtlar:


48

Masaüstünüzde ek bir simge yardımıyla, bunu yapmanın bir yolu. Sanırım masaüstünüzde yalnızca tek bir simge olmasını istiyorsanız, komut dosyasını bir başkasına taşıyabilirsiniz.

  1. Masaüstünüzdeki Powershell betiğinize bir kısayol oluşturun
  2. Kısayolu sağ tıklatın ve sonra Özellikler'i tıklatın.
  3. Click Kısayol sekmesine
  4. Gelişmiş'i tıklayın
  5. Yönetici Olarak Çalıştır'ı seçin.

Artık masaüstünüzdeki yeni kısayolu çift tıklatarak yükseltilmiş olan betiği çalıştırabilirsiniz.


35
Bu benim için çalıştı, ancak Yönetici olarak Çalıştırpowershell -f komutunu "tamamlamak" için komut dosyası yolunun önüne eklendikten sonra kullanılabilir hale geldi …
mousio

2
@mousio - Buna da ihtiyacım vardı, yorum için teşekkürler
m.edmondson

@mousio bu komutun neden işe yaradığını bana söyleyebilir misiniz?
SShaheen,

7
@SShaheen - Yönetici Olarak Çalıştır seçeneğinin kullanılabilir olması için, kısayolun, yalnızca belirtilen belgenin veya komut dosyasının yerine bir tür yürütülebilir dosyayı (örneğin powershell.exe) göstermesi gerekir. Çalışmaya kısayol script.ps1, kısayol gibi powershell.exe -f script.ps1, ancak ikincisi yönetici olarak çalışacak şekilde ayarlanabilir ( veya anahtarın powershell.exe /?açıklamasına bakın )-f-File
mousio

16

UAC özellikli sistemlerde, bir komut dosyasının tam yönetici ayrıcalıklarıyla çalıştığından emin olmak için, bu kodu komut dosyanızın başına ekleyin:

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

komut dosyanızı-yükseltilmiş anahtarla çalıştırırken, çalıştırmadan önce ayrıcalıkları yükseltmeye çalışır.


Eğer script argümanlar-parametreler gerektiriyorsa?
Kiquenet

peki bu bana tam ayrıcalıklarla çalıştığını söylerse, ancak kodum hala yetersiz idari ayrıcalıklar olduğunu söylüyorsa?
mike.b93

@Kiquenet en üste ekleyip param(...)ileri doğru yönlendir -elevated, tam olarak nasıl oluşturduğun konusunda zekice olmalısın ArgumentList, muhtemelen String[]formu kullanmak isteyeceksin .
TWiStErRob

oldukça şık - kısayol oluşturmaktan daha iyi
Mikey

13

Aynı güç kabuğundaysanız bunu yapabilirsiniz:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"

Bununla ilgili sorun, çağrılan betiğin çalışma dizinini değiştirmesidir C:\Windows\System32. Geçerli dizini koruyan bir alternatif: stackoverflow.com/a/57033941/2441655
Venryx

4

Masaüstünüze oturduğundan, bunu yapmanın en kolay yolunun onu yükseltme aracına sürüklemek olduğunu söyleyebilirim .

Aksi takdirde kullanarak ayrı senaryo yapabilir komutu sizin ps1 senaryo üzerinde.elevate

Veya elevateyalnızca servis başlangıç ​​bitine uygulayabilirsiniz .


1

PowerShell ISE,% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe konumunda yaşıyor. Bunu sağ tıklayıp "Yönetici olarak çalıştır" ı seçebilir ve komut dosyasını oradan çalıştırabilirsiniz.

Ayrıca, Windows Logosu> Tüm Programlar> Donatılar> Windows PowerShell altında da bulabilirsiniz ve bu kısayolları ile aynı şeyi yapın.



-1

Bunu betiğin başına ekleyin:

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}

Bu , dört yıldan fazla bir süre önce MDMoore313'ün cevabının alt kümesi gibi görünüyor .
Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.