将字符串变量传递给Sharepoint命令而没有期望的结果

时间:2015-03-20 19:50:57

标签: powershell sharepoint sharepoint-2013 powershell-v3.0

我使用了许多字段来构建字符串,以便从SharePoint 2013列表中提取值。

我用它来构建字符串。

foreach($Column in $StringColumns){
$Fields=$Fields+"`""+$Column+"`""
if($Loop -ne $ColumnCount){
$Fields=$Fields+","
$Loop++}
}

我使用构建的$Fields [string]变量并将其传递给此命令。

$SPList.getitems($queryfromsource)[$ItemNumber][$Fields]

结果是我没有收到命令的输出。令我感到奇怪的是,我可以确认$Fields在该命令中有适当的字符串。我通过在控制台中调用它然后直接将输出复制到SharePoint命令来完成此操作。当我这样做时,我收到了我正在寻找的输出。

这似乎应该非常简单,但它让我疯了。

2 个答案:

答案 0 :(得分:0)

会是这样的吗?

foreach ($Column in $StringColumns)
{
    $Fields+= "`"$($Column)`""
    if ($Loop -ne $ColumnCount)
    {
        $Fields+= ","
        $Loop++
        # Only use Write-Host for debugging
        Write-Host "Column $Loop of $ColumnCount" 
    }
}

你是否在某处初始化$ Loop,可能会尝试打印你所在的循环数?

答案 1 :(得分:0)

您可能应该了解一下PowerShell中的字符串构建技术。你所拥有的那种复杂的构造不仅需要创建太多的工作,而且调试起来也很困难,因为你的例子证明是完美的。你需要将$Loop初始化为1而不是0(我假设你正在做的事情,请总是发布完整的代码),或者将$Loop++放在循环的开头,否则字符串有最后一个逗号。您还需要将$Fields变量初始化为空字符串。

您是否通过打印实际变量来检查脚本的字符串输出?如果在控制台中检查它,您可能已经初始化了一些您忘记在脚本中执行的变量。

构建字符串的更简单方法:

$columns = 'Title', 'Created', 'Description'

$string = "`"$($columns -join '","')`""