PowerShell'in yönetici olarak çalışıp çalışmadığını tespit etme


36

PowerShell'in yönetici ayrıcalıklarıyla çalıştığını komut dosyalarımda nasıl anlarım?

Bilmem gerek çünkü korumalı bağlantı noktalarını açma yeteneği gerektiren bir programı çalıştırmaya çalışıyorum.


Yanıtlar:


42
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

Bunun ne yaptığını parçalamak:

  • [bool]- Son sonucu a a bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- WindowsIdentityÇalışmakta olan kullanıcı için alır.
  • (...).groups- groupsHangi kullanıcı kimliğinin üyesi olduğunu bulmak için kimliğin özelliğine erişin .
  • -match "S-1-5-32-544"Administrators grubunun İyi Bilinen SID'sinigroups içerip içermediğini kontrol eder , kimlik yalnızca "yönetici olarak çalıştır" kullanılmışsa içerecektir.

2
Sadece bir kod satırı göndermek yerine, lütfen ne yaptığını açıklayabilir misiniz? Bu, gelecekteki ziyaretçilerin gerektiğinde onu anlama ve uyarlamalarına yardımcı olur.
slhck

BOOO. Bu adama daha fazla oy ver
Kolob Canyon

4
Cevabını @Bill_Stewart tarafından tercih ediyorum çünkü sihirli dizgilerden yoksun.
8DH

Kullanmak -matchve [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
tahmin yazmak

57
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

Bu, geçerli Windows kimliğini alır ve geçerli kimlik Yönetici rolüne sahipse (yani, yüksek çalışıyorsa) True değerini döndürür.


13
Kabul edilen cevap doğru olsa da, bu cevap özellikle betiğinizi altı ay sonra okuyabilen biri için çok daha açık.
Patrick Seymour

46

Powershell 4.0'da kullanabileceğiniz script'inizi gerektirir :

#Requires -RunAsAdministrator

Çıktılar:

'MyScript.ps1' betiği, Yönetici olarak çalışmak için bir "#requires" ifadesi içerdiğinden çalıştırılamaz. Geçerli Windows PowerShell oturumu Yönetici olarak çalışmıyor. Yönetici Olarak Çalıştır seçeneğini kullanarak Windows PowerShell'i başlatın ve sonra komut dosyasını yeniden çalıştırmayı deneyin.


Yönetici tarafından çalıştırılmazsa, çıkacak bir işlev istiyorsan ne olacak?
Kolob Kanyonu

1
@KolobCanyon - Yalnızca yükseltilmiş bir PowerShell işlevini çalıştırmak gibi bir şey yoktur ; PowerShell işleminin tamamı yükseltilmiş veya değil.
Bill_Stewart

@Bill_Stewart evet, ancak returnkullanıcı yönetici değilse :)
Kolob Canyon

1
@KolobCanyon - PowerShell işlemini yalnızca yükseltebilirsiniz ; tek bir işlevi yükseltemezsiniz . Bu nedenle #Requires -RunAsAdministratorfaydalıdır: Yükseltilmiyorsanız tüm betiğin çalışmasını engeller .
Bill_Stewart

@Bill_Stewart Evet, bunu bir noktada kullanmak zorunda kalacağım.
Kolob Kanyonu
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.