Làm cách nào để xác định chức năng PowerShell cần độ cao?


20

Vì tôi không thể tìm thấy bất kỳ thay thế nào cho sudolệnh nâng cao của Linux , tôi có câu hỏi sau:

Làm cách nào để xác định chức năng PowerShell cần độ cao? Ý tôi là nhắc UAC.

Nói, chức năng như sau:

function system-check {
    SFC /ScanNow
}

Hệ thống:

Windows 8.1 Pro 64-bit

PowerShell:

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

EDIT1:

Để dễ hiểu 100%, hãy để tôi viết lại:

  1. Tôi chạy PowerShell với tư cách người dùng
  2. Tôi chạy chức năng nói trên system-check
  3. Tôi muốn chức năng nâng lên để có thể thực hiện lệnh; lưu ý rằng tôi muốn lời nhắc UAC xuất hiện

Lưu ý rằng nhiều lệnh được tạo trong các lệnh powershell và các lệnh được thêm bởi các mô-đun của Microsoft (chẳng hạn như các lệnh MSOL) thường yêu cầu độ cao nhưng không có cách nào cung cấp hỗ trợ về độ cao đặc quyền. Họ chỉ đơn giản là thất bại với các thông báo lỗi khó hiểu. Nếu bạn xây dựng lời nhắc nâng cao vào tập lệnh của mình, bạn sẽ cung cấp sự thân thiện với người dùng hơn chính Microsoft.
Todd Wilcox

Câu trả lời:


33

Để chạy một lệnh cụ thể từ một cửa sổ nâng cao:

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

Ví dụ:

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

Để chạy một tập lệnh cụ thể từ một cửa sổ nâng cao:

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

Để chạy toàn bộ phiên PowerShell nhắc nhở cho UAC:

Start-Process powershell.exe -Verb runAs

Hàm trả về $ True hoặc $ false nếu cửa sổ hiện tại đang chạy với quyền nâng cao:

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

Để đảm bảo tập lệnh chỉ được chạy với tư cách Quản trị viên, hãy thêm đoạn mã này vào đầu:

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

Trong PowerShell v4.0, phần trên có thể được đơn giản hóa bằng cách sử dụng câu lệnh #Requires:

#Requires -RunAsAdministrator

Nguồn: Chạy với quyền nâng cao

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.