3

Я пытаюсь использовать runas в функции PowerShell, чтобы служить sudo для бедного человека, но runas , похоже, на самом деле не дает мне права администратора. Например, я получаю отказано в доступе при запуске:

runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory"

Кроме того, если я открываю vim и пытаюсь записать файл в System32, при сохранении выдается сообщение об ошибке:

runas /user:admin "C:\Program Files (x86)\Vim\vim74\gvim.exe C:\Windows\System32\mynewtextfile.txt"

Я не думаю, что это проблема с учетными данными, потому что я могу выполнять неадминистративные задачи, такие как запись файлов на рабочий стол, и мой пароль, кажется, работает нормально. Я проверил в инструменте "Управление компьютером" в разделе "Администрирование", а "admin" в группе "Администраторы". Что мне не хватает? Я на Windows 7 Pro.

3 ответа3

0

Я нашел следующую информацию в get-help -full start-process документации по процессу запуска :

# Запускает процесс PowerShell с разрешениями "Запуск от имени администратора".

PS C:> запуск процесса powershell.exe -verb runas

Насколько я могу судить, runas.exe может изменить вашего пользователя, но не повысит ваши права. Однако, основываясь на приведенной выше цитате, Start-Process powershell может быть использован для этого, поэтому я закончил тем, что выполнил следующее в своей функции sudo , которая, кажется, работает достаточно хорошо:

$MY_PROFILE_TMP="$Env:TMP\my_profile_tmp";
Function Init-TMP() {
   #Make sure my personal tmp directory exists
   if (!(Test-Path $MY_PROFILE_TMP)) {
      mkdir $MY_PROFILE_TMP | Out-Null
   }
}

Function As-Admin() {
   Init-TMP

   #Create unique temp filenames to capture stderr and stdout
   $GUID=New-Guid
   $ADMIN_OUT="$MY_PROFILE_TMP\$($GUID)_OUT.txt"
   $ADMIN_ERR="$MY_PROFILE_TMP\$($GUID)_ERR.txt"

   #Remove temp files if for some anomoly or error they already exist
   rm -ErrorAction Ignore $ADMIN_OUT
   rm -ErrorAction Ignore $ADMIN_ERR

   #Start powershell with elevated permissions and write to the tmp out and error files
   #Without the &{}, invalid commands like `sudo dinosaur` don't get
   #captured to the error file
   Start-Process powershell "& { $args } 2>$ADMIN_ERR > $ADMIN_OUT" -Verb runas -Wait -WindowStyle Hidden

   #Write to the current console the out and error results from the elevated process
   #TODO ideally, we'd read from these as a stream  so the order would be correct...
   cat $ADMIN_ERR -Delimiter None | Write-Error
   cat $ADMIN_OUT

   #Remove the temp files
   rm -ErrorAction Ignore $ADMIN_OUT
   rm -ErrorAction Ignore $ADMIN_ERR
}

#Make an alias "sudo"
New-Alias -Name sudo -Value As-Admin
0

После моего исследования в Windows 10, следующие команды РАБОТА:

Высота:

saps -Verb RunAs "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory"

Переключение пользователей:

saps -Verb RunAsUser "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory"

Следующие команды НЕ РАБОТАЮТ:

  • runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory" - это не приводит к повышению привилегий
  • saps -Credential admin "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory" - это не приводит к повышению привилегий
  • New-Item -Credential admin "C:\Windows\System32\mydirectory" - поставщик FileSystem не поддерживает альтернативные учетные данные, кроме командлета New-PSDrive.
-1

UAC включен? Если да, запускаете ли вы сценарий PowerShell из командной строки с повышенными привилегиями?

На команду runas распространяются ограничения UAC его родительского командного окна. Если вы не вызывали команду runas из командной строки с повышенными правами, у пользователя не будет повышенных учетных данных, даже если это административная учетная запись.

К сожалению, так работает UAC. Единственное отличие состоит в том, что приложение CLI (такое как runas) не может запрашивать повышение прав, когда это необходимо так, как это может делать программа GUI. В операционных системах * NIX нет Windows, эквивалентного команде sudo.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .