Код для проверки прав администратора не работает на некоторых серверах
У меня есть строка кода в небольшом написанном мной сценарии, который проверяет, есть ли у Powershell административные привилегии перед выполнением. Фрагмент с административной проверкой ниже:
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` [Security.Principal.WindowsBuiltInRole] “Administrator”))
{
Write-Warning “You do not have Administrator rights to run this script.`nPlease re-run this script as an Administrator.”
Break
}
Когда некоторые клиенты запускают скрипт, они получают следующую ошибку, и я не уверен, почему. Может кто-нибудь, пожалуйста, объясните мне это?
Сообщение об ошибке в ссылке на скриншот PowerShell
РЕДАКТИРОВАТЬ: Чтобы было ясно, сценарий отлично работает на большинстве серверов или компьютеров с установленным PowerShell, только у клиента время от времени возникают проблемы со сценарием.
1 ответ
Кажется, в вашем коде есть несколько странных цитат сразу после IsInRole(
, используйте этот код, который работает каждый раз:
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "You do not have Administrator rights to run this script.`nPlease re-run this script as an Administrator."
Break
}
Старым версиям PowerShell не нравится обратная кавычка на IsInRole(`
. Обычно это используется, чтобы указать, что оператор кода продолжается на следующей строке, но здесь он используется в середине строки.
Новые версии PowerShell, похоже, допускают обратные кавычки в середине кода, но похоже, что более старые версии настаивают на том, чтобы он был последним символом в строке.
Если вы поместите разрыв строки сразу после `
как показано ниже (или если вы просто удалите его), он должен работать в старых оболочках PowerShell.
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Write-Warning "You do not have Administrator rights to run this script.`nPlease re-run
this script as an Administrator."
Break
}
Я также на всякий случай поменял ваши фигурные кавычки на ASCII.