首页 > 解决方案 > 如何在powershell中测试布尔值?

问题描述

我有一个 powershell 脚本,旨在确保有人以管理员身份运行该脚本。

变量 $currentPrincipal 返回真或假。

这是代码:

$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"

}

但是,当以管理员身份运行并且 currentPrincipal 为 true 时,它​​仍然会落入 else ... 这是 CLI,它显示:

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

我的问题是,在 powershell 中评估布尔值的正确方法是什么?

标签: windowspowershellscripting

解决方案


您当前正在调用WindowsPrincipal.IsInRole,它将输出Boolean结果。此外,$currentPrincipalis 类型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"
}

推荐阅读