2015-03-20 2 views
0

У меня есть несколько полей, которые я использую для построения строки для извлечения значений из списка SharePoint 2013.Передача строковой переменной команде Sharepoint без желаемого результата

Я использую это, чтобы построить строку.

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

Я принимаю встроенный $Fields [строка] переменной и передать его в эту команду.

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

В результате я получаю не вывод из команды. Что странно, так это то, что я могу подтвердить, что для этой команды $Fields имеет соответствующую строку. Я сделал это, позвонив в консоль, а затем напрямую скопировал вывод в команду SharePoint. Когда я это делаю, я получаю вывод, который я ищу.

Кажется, что это должно быть невероятно просто, но это сводит меня с ума.

+0

Одна вещь, которую я заметил, что на ISE консоли результирующее значение '$ fields' довольно долго и оборачивает 5 строк. Если я помещаю команду в консоль, она работает, когда я удаляю разрывы строк. Возможно, это взаимодействие с ISE? –

ответ

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 где-нибудь, возможно, попросите его напечатать номер цикла, на котором вы находитесь?

+0

Я инициализирую '$ Loop' до этого блока, я просто не включил его. Одна вещь, которую я, возможно, не смог указать, заключается в том, что команда SharePoint, которую передается переменной '$ Fields', должна быть в формате, таком как« Поле1 »,« Поле2 », ...' –

+0

Перечисленный мной цикл сохраните этот формат. Write-Host - это просто способ визуализации того, что цикл работает. ($ Fields + = $ Column) == ($ Fields = $ Fields + $ Column) – mortenya

+0

Я понимаю сокращенную часть, и правильнее использовать этот метод. Я просто говорю, что я использовал escape-символы, так что вывод был «« Field1 »,« Field2 », ...' вместо «Field1, Field2, ...», что и возвращает ваша версия. –

0

Возможно, вам нужно немного узнать о методах построения строк в PowerShell. У этой сложной конструкции, которую у вас есть, есть не просто слишком много работы для создания, ее также сложно отладить, так как ваш пример отлично выглядит. Вам нужно инициализировать $Loop до 1, а не 0 (я предполагаю, что это то, что вы делаете, всегда отправляйте полный код) или поместите $Loop++ в начале цикла, иначе строка будет иметь запятую в конце. Вам также необходимо инициализировать переменную $Fields пустой строкой.

Вы проверили вывод строки своего сценария, напечатав фактическую переменную? Если вы проверите его в консоли, вы, возможно, уже инициализировали некоторую переменную, которую вы забыли сделать в скрипте.

Гораздо более простой способ построить строку:

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

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

Я немного поработаю над обучением. Ваш метод, безусловно, более изящный, спасибо за то, что он сообщил мне, что соединение доступно для построения строк. Результат моей конструкции идентичен твоему и обеспечивает одинаково неудачный результат. Цикл инициализируется, как вы сказали. –

Смежные вопросы