Yükseklik gerektiren bir PowerShell işlevi nasıl tanımlanır?


20

Linux'un sudoyükseltme komutuna alternatif bulamadığım için şu sorum var:

Yükseklik gerektiren bir PowerShell işlevi nasıl tanımlanır? UAC istemi demek istiyorum.

Diyelim ki, böyle bir işlev:

function system-check {
    SFC /ScanNow
}

Sistem:

Windows 8.1 Pro 64-bit

Güç kalkanı:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

Edit1:

% 100 anlaşılabilir olmak için tekrar ifade edeyim:

  1. PowerShell'i kullanıcı olarak çalıştırıyorum
  2. Yukarıda belirtilen işlevi çalıştırıyorum system-check
  3. Komutu uygulayabilmek için fonksiyonun yükselmesini istiyorum; Not, UAC isteminin görünmesini istediğimi

Microsoft modüllerinin (MSOL komutları gibi) eklediği pek çok powershell komutunun ve komutunun genellikle yükseltme gerektirdiğini, ancak hiçbir şekilde ayrıcalık yükseltme konusunda yardım sağlamadığını unutmayın. Onlar sadece şifreli hata mesajları ile başarısız olur. Komut dosyalarınıza bir yükseltme istemi oluşturursanız, Microsoft'un kendisinden daha fazla kullanıcı dostu olursunuz.
Todd Wilcox

Yanıtlar:


33

Yükseltilmiş bir pencereden belirli bir komutu çalıştırmak için:

Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs

Örneğin:

Start-Process -FilePath powershell.exe -ArgumentList {
    SFC /scannow
} -verb RunAs

Belirli bir komut dosyasını yükseltilmiş bir pencereden çalıştırmak için:

Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs

UAC'yi isteyen bir PowerShell oturumunun tamamını çalıştırmak için:

Start-Process powershell.exe -Verb runAs

Geçerli pencere yükseltilmiş izinlerle çalışıyorsa, $ True veya $ False döndüren işlev:

function isadmin
 {
 #Returns true/false
   ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
 }

Bir komut dosyasının yalnızca Yönetici Olarak çalıştırıldığından emin olmak için, bunu başa ekleyin:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
 {
  Echo "This script needs to be run As Admin"
  Break
 }

PowerShell v4.0'da yukarıdakiler #Requires ifadesi kullanılarak basitleştirilebilir:

#Requires -RunAsAdministrator

Kaynak: Yükseltilmiş izinlerle çalıştır

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.