Как проверить логическое значение в powershell? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть сценарий powershell, который должен убедиться, что кто-то запускает сценарий от имени администратора.

Переменная $ currentPrincipal возвращает значение true или false.

Вот код:

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

If ($currentPrincipal -eq $true) {

    Write-host "yay"
}
Else {

   Write-Host "boo"

}

Но при работе от имени администратора AND currentPrincipal имеет значение true, он все равно падает до другого ... Вот CLI, который показывает, что:

PS C:\WINDOWS\system32> C:\Users\dogzilla\Desktop\SetSQLServerToManual.ps1
True
boo

Мой вопрос заключается в том, чтоправильный способ оценки логического значения в powershell?

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

Вы в данный момент просто звоните WindowsPrincipal.IsInRole, что выдаст результат Boolean. Кроме того, $currentPrincipal имеет тип System.Security.Principal.WindowsPrincipal, который не является Boolean. Я бы исправил ваш код, чтобы сохранить результат IsInRole() в качестве переменной и проверить его вместо этого.

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$checkRole = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

If ($checkRole -eq $true) {
    Write-host "yay"
}
Else {
    Write-Host "boo"
}
0 голосов
/ 22 октября 2019

Это способ проверить это:

if ( ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) -eq $true )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...