Визначте, чи працює 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.