В сценарии PowerShell, как я могу проверить, работаю ли я с правами администратора?

Стандартный ответ: не позволяйте своим пользователям установить несанкционированное программное обеспечение на своих компьютерах :)

Но другой способ обработать это состоит в том, чтобы быть более общим в Ваших методах управления. Мы используем прокси-сервер как Солдат, который может также отрегулировать пропускную способность. Затем Вы вызываете весь доступ в Интернет через прокси и блокируете все выходящее в Вашем брандмауэре. Большинство программ будет работать просто великолепно с прокси, и можно создать исключения на приложении основанием приложения, но материал P2P, вероятно, просто умрет в брандмауэре. Если это, действительно оказывается, работает через прокси, можно отрегулировать его там легче.

48
задан 23 February 2016 в 20:39
5 ответов
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

(от приемов безопасности Командной строки)

38
ответ дан 28 November 2019 в 19:38
  • 1
    $currentPrincipal = Ново-объектная безопасность. Принципал. WindowsPrincipal ([безопасность. Принципал. WindowsIdentity]:: GetCurrent ()) & {если ($currentPrincipal. IsInRole ([безопасность. Принципал. WindowsBuiltInRole]:: Администратор)) {(получать-хост).UI.RawUI.Backgroundcolor =" DarkRed" хост записи ясного хоста " Предупреждение: PowerShell работает как Администратор.'n"} –  davey 17 December 2009 в 22:16
function Test-Administrator  
{  
    $user = [Security.Principal.WindowsIdentity]::GetCurrent();
    (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)  
}

Выполните вышеупомянутую функцию. ЕСЛИ результат Правда, у пользователя есть административные привилегии.

33
ответ дан 28 November 2019 в 19:38
  • 1
    Это только определяет, является ли пользователь, запускающий скрипт, администратором на машине - и не, если сценарий в настоящее время выполнен с административными привилегиями . Другими словами, это все еще возвратит true, даже если пользователь не использовал " выполненный как administrator" запустить командный процессор. –  Holistic Developer 17 October 2014 в 22:34

В Powershell 4.0 вы можете использовать requires в верхней части вашего сценария:

#Requires -RunAsAdministrator

Outputs:

Сценарий 'MyScript.ps1' не может быть запущен, так как он содержит оператор "#requesres" для на посту администратора. Текущий сеанс Windows PowerShell не запущен от имени администратора. Запустить Windows PowerShell с помощью опции Run as Administrator, а затем попробуйте запустить скрипт еще раз.

57
ответ дан 28 November 2019 в 19:38

മുകളിലുള്ള ഉത്തരങ്ങളുടെ സംയോജനമായി, നിങ്ങളുടെ സ്ക്രിപ്റ്റിന്റെ തുടക്കത്തിൽ‌ ഇനിപ്പറയുന്നവ പോലുള്ളവ ഉപയോഗിക്കാൻ‌ കഴിയും:

# todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator  
{  
    [OutputType([bool])]
    param()
    process {
        [Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
        return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
    }
}

if(-not (Test-Administrator))
{
    # TODO: define proper exit codes for the given errors 
    Write-Error "This script must be executed as Administrator.";
    exit 1;
}

$ErrorActionPreference = "Stop";

# do something

മറ്റൊരു മാർ‌ഗ്ഗം ഈ വരി ഉപയോഗിച്ച് നിങ്ങളുടെ സ്ക്രിപ്റ്റ് ആരംഭിക്കുക, ഇത് ഇത് തടയും അഡ്‌മിൻ അവകാശങ്ങളുമായി ആരംഭിക്കാത്തപ്പോൾ നടപ്പിലാക്കൽ.

#Requires -RunAsAdministrator
0
ответ дан 28 November 2019 в 19:38

Это проверяет, являетесь ли вы администратором, если нет, то он снова откроется в PowerShell ISE в качестве администратора .

Надеюсь, это поможет!

    $ver = $host | select version
    if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}

    # Verify that user running script is an administrator
    $IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
    If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
    {
      "`nERROR: You are NOT a local administrator.  Run this script after logging on with a local administrator account."
        # We are not running "as Administrator" - so relaunch as administrator

        # Create a new process object that starts PowerShell
        $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell_ise";

        # Specify the current script path and name as a parameter
        $newProcess.Arguments = $myInvocation.MyCommand.Definition;

        # Indicate that the process should be elevated
        $newProcess.Verb = "runas";

        # Start the new process
        [System.Diagnostics.Process]::Start($newProcess);

        # Exit from the current, unelevated, process
        exit
    }
0
ответ дан 28 November 2019 в 19:38

Теги

Похожие вопросы