Як я можу в своїх сценаріях визначити, чи PowerShell працює з правами адміністратора?
Мені потрібно знати, тому що я намагаюся запустити програму, яка вимагає можливості відкривати захищені порти.
Як я можу в своїх сценаріях визначити, чи PowerShell працює з правами адміністратора?
Мені потрібно знати, тому що я намагаюся запустити програму, яка вимагає можливості відкривати захищені порти.
Відповіді:
[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 групи адміністраторів, ідентифікатор буде містити його лише у тому випадку, якщо було використано "запустити як адміністратор".-match
та [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Це отримує поточну ідентичність Windows і повертає True, якщо поточна ідентифікатор виконує роль адміністратора (тобто працює піднятим).
У Powershell 4.0 ви можете використовувати потрібно у верхній частині сценарію:
#Requires -RunAsAdministrator
Виходи:
Сценарій 'MyScript.ps1' неможливо запустити, оскільки він містить оператор "#requires" для запуску адміністратора. Поточний сеанс Windows PowerShell не працює як адміністратор. Запустіть Windows PowerShell, скориставшись опцією Запустити як адміністратор, а потім спробуйте запустити сценарій ще раз.
return
якщо користувач не адміністратор :)
#Requires -RunAsAdministrator
корисно: Це заважає виконувати весь сценарій, якщо ви не підвищені.