PowerShell Elseif失效,SharePoint脚本变量赋值错误求助
问题排查与修正方案
你的脚本问题出在条件判断的逻辑运算符使用错误:在-or连接的多个条件中,你只在第一个条件写了完整的$sites.HostName -eq "xxx",后面直接写字符串(比如"contoso1.domain.cs")。在PowerShell中,非空字符串会被解析为布尔值$true,这就导致第一个if条件永远为真,不管实际主机名是什么,都会执行第一个分支的赋值操作。
修正方法1:补全所有比较表达式
每个-or连接的条件都需要完整的比较逻辑:
$sites = Get-SPSite https://contoso.domain.cs/sites/sc $Logo = $null if ($sites.HostName -eq "contoso.domain.cs" -or $sites.HostName -eq "contoso1.domain.cs" -or $sites.HostName -eq "contoso2.domain.cs") { $Logo = "/path/to/logo.jpg" } elseif ($sites.HostName -eq "contosoq.domain.cs" -or $sites.HostName -eq "contoso1q.domain.cs" -or $sites.HostName -eq "contoso2q.domain.cs") { $Logo = "/path/to/logo2.jpg" } elseif ($sites.HostName -eq "contoso3q.domain.cs") { $Logo = "/path/to/logo3.jpg" } else {}
修正方法2:使用-in运算符简化代码
PowerShell的-in运算符可以直接判断值是否在指定集合中,代码更简洁易读:
$sites = Get-SPSite https://contoso.domain.cs/sites/sc $Logo = $null $primaryHosts = @("contoso.domain.cs", "contoso1.domain.cs", "contoso2.domain.cs") $secondaryHosts = @("contosoq.domain.cs", "contoso1q.domain.cs", "contoso2q.domain.cs") if ($sites.HostName -in $primaryHosts) { $Logo = "/path/to/logo.jpg" } elseif ($sites.HostName -in $secondaryHosts) { $Logo = "/path/to/logo2.jpg" } elseif ($sites.HostName -eq "contoso3q.domain.cs") { $Logo = "/path/to/logo3.jpg" } else {}
这两种写法都能正确根据主机名匹配对应的Logo路径,解决你遇到的分支失效问题。
内容的提问来源于stack exchange,提问作者RJ96
相关产品推荐
相关产品推荐

