0

我不确定我错过了什么。这个 powershell 似乎与我的预期相反。有谁知道为什么?

$loadUserProfileValue = Get-ItemProperty "IIS:\AppPools\.net v4.5" -Name processModel.loadUserProfile.Value
    Write-Host "Value: $loadUserProfileValue"
    IF ($loadUserProfileValue -eq "False") {
            Write-Host "Since Load User Profile is False, we will now set it to True"}

这是加载用户配置文件为真时的输出

Value: True
Since Load User Profile is False, we will now set it to True

这是加载用户配置文件为 False 时的输出

Value: False

该值被正确提取。变量 $loadUserProfileValue 是正确的。IF 声明与我的预期相反。

我可以将它交换为 -ne "True" 并且它似乎可以工作......但是为什么 -eq "False" 不起作用?

4

2 回答 2

1

当属性可能返回布尔值时,您正在测试字符串值 false。PowerShell 的类型转换器可能是导致此错误的原因。

更改您的测试以使用 $false 而不是 'false' 并查看是否可以解决它。这是一篇很棒的文章:

https://devblogs.microsoft.com/powershell/boolean-values-and-operators/

编辑:您可以(并且应该)始终检查返回对象的数据类型,并且可以使用所有对象的继承方法 .gettype() 来执行此操作。对于您的代码,它将是: $loadUserProfileValue.gettype()它会告诉您返回的对象是否被转换为布尔值、字符串等。

于 2022-02-02T14:32:46.257 回答
1

在 PowerShell 中,您可以像这样使用布尔数据类型:True = $trueFalse = $false.

在您的情况下,您必须将 False 更改为$false

$loadUserProfileValue = Get-ItemProperty "IIS:\AppPools\.net v4.5" -Name processModel.loadUserProfile.Value
Write-Host "Value: $loadUserProfileValue"
IF ($loadUserProfileValue -eq $false) {
        Write-Host "Since Load User Profile is False, we will now set it to True"}

Stack Overflow 上已经有关于该主题的问题:问题

于 2022-02-02T14:38:51.793 回答