You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:55:18