PowerShell Новая переменная трубопровода с String / ArrayValue в "{}" - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно решение для создания массива в определенном формате.

Справочная информация Я экспортирую список SharePoint и получаю свои поля из файла XML.

Команда (через PnP) для экспорта выглядит следующим образом:

$AllSPListItems = Get-PnPListItem $SharePointListName

$ItemsSelection = @{ L = "ID"; E = { $_["ID"] } },@{ L = "SP_SiteURL"; E = { $_["SP_SiteURL"] } }

$AllSPListItems | Select $ItemsSelection | Export-Csv -Path "C:\Temp\XYZ.csv"

Это работает, но вот что я хочу:

$ItemsSelection = @{ L = "$FieldDisplayName[0]"; E = { $_[$FieldURLName[0]] } },@{ L = "$FieldDisplayName[1]"; E = { $_[$FieldURLName[1]] } } }

Я получаю переменные $FieldDisplayName и $FieldURLName из моего XML.

К сожалению, я получаю только следующий вывод:

@{ L = "ID"; E = { $_[$FieldURLName[0]] } },@{ L = "SP_SiteURL"; E = { $_[$FieldURLName[1]] } } }

Name                           Value                                                                                                                                                     
----                           -----                                                                                                                                                     
E                              $FieldURLName[0]                                                                                                                 
L                              ID
E                              $FieldURLName[1]                                                                                                                 
L                              SP_SiteURL

Так как я могу получить значение "E", а не текст? Переменные не разрешаются.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Хорошо, у меня есть решение, оно непривлекательно, но, видимо, другой возможности нет. Я использую переключатель Case:

переключатель ($ FieldDisplayName.Length) {

1 {$items | Select @{ L = $FieldDisplayName[0]; E = { $_[$FieldURLName[0]] } } | Export-Csv -Path "C:\install\ExportV1.csv"} 
2 {$items | Select @{ L = $FieldDisplayName[0]; E = { $_[$FieldURLName[0]] } },@{ L = $FieldDisplayName[1]; E = { $_[$FieldURLName[1]] } } | Export-Csv -Path "C:\install\ExportV1.csv"} 

}

0 голосов
/ 18 марта 2019

Так как я могу получить значение "E", а не текст?

Вы получаете текст E скриптового блока, потому что он еще не выполнен - это происходит только тогда, когда вы используете его с Select-Object.

Чтобы получить правильные имена меток, удалите кавычки " вокруг выражения метки:

$ItemsSelection = @{ L = $FieldDisplayName[0]; E = { $_[$FieldURLName[0]] } },@{ L = $FieldDisplayName[1]; E = { $_[$FieldURLName[1]] } } }
$AllSPListItems | Select $ItemsSelection | Export-Csv -Path "C:\Temp\XYZ.csv"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...