Визначте, чи працює PowerShell як адміністратор


36

Як я можу в своїх сценаріях визначити, чи PowerShell працює з правами адміністратора?

Мені потрібно знати, тому що я намагаюся запустити програму, яка вимагає можливості відкривати захищені порти.


1
Ви матимете на увазі підвищити дозволи, як описано в Отриманні привілеїв адміністратора у відповіді PowerShell
MiFreidgeim SO - перестаньте бути злим

Відповіді:


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

Розбиваючи, що це робить:

  • [bool]- Віддайте кінцевий результат до a bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- Отримує WindowsIdentityпоточного користувача.
  • (...).groups- Отримайте доступ до groupsвластивості ідентичності, щоб дізнатися, до яких груп користувачів належить особа.
  • -match "S-1-5-32-544"перевіряє, чи groupsмістить добре відомий SID групи адміністраторів, ідентифікатор буде містити його лише у тому випадку, якщо було використано "запустити як адміністратор".

2
Замість того, щоб просто розміщувати рядок коду, можете пояснити, що це робить? Це допомагає майбутнім відвідувачам зрозуміти та адаптувати його, якщо це необхідно.
slhck

BOOO. Дайте цій людині більше грошей
Каньйон Колоб

4
Я вважаю за краще відповідь @Bill_Stewart нижче, оскільки вона не містить магічних рядків.
8DH,

Замість використання -matchта [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
набору даних

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

Це отримує поточну ідентичність Windows і повертає True, якщо поточна ідентифікатор виконує роль адміністратора (тобто працює піднятим).


13
Хоча прийнята відповідь правильна, ця відповідь набагато зрозуміліша, особливо тому, хто може прочитати ваш сценарій через півроку.
Патрік Сеймур

46

У Powershell 4.0 ви можете використовувати потрібно у верхній частині сценарію:

#Requires -RunAsAdministrator

Виходи:

Сценарій 'MyScript.ps1' неможливо запустити, оскільки він містить оператор "#requires" для запуску адміністратора. Поточний сеанс Windows PowerShell не працює як адміністратор. Запустіть Windows PowerShell, скориставшись опцією Запустити як адміністратор, а потім спробуйте запустити сценарій ще раз.


що робити, якщо ви хочете функцію, яка закривається, якщо її не виконує адміністратор?
Калонь Колоб

1
@KolobCanyon - Не існує такого поняття, як запускати лише підвищену функцію PowerShell; весь процес PowerShell або підвищений, або ні.
Bill_Stewart

@Bill_Stewart так, але ви можете, returnякщо користувач не адміністратор :)
Kolob Canyon

1
@KolobCanyon - ви можете лише підвищити процес PowerShell ; ви не можете підняти одну функцію . Ось чому #Requires -RunAsAdministratorкорисно: Це заважає виконувати весь сценарій, якщо ви не підвищені.
Bill_Stewart

@Bill_Stewart Так, мені доведеться використовувати це в якийсь момент.
Калонь Колоб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.