Проблема с амперсандом при проверке имени термина в SharePoint с помощью PowerShell - PullRequest
0 голосов
/ 17 ноября 2018

Я создаю термины в SharePoint с помощью PowerShell в Интернете. У меня нет проблем с добавлением нового термина в первый раз.

Если в следующий раз я проверю, существует ли термин, и амперсанд &amp преобразуется в другой гекс в SharePoint, в результате чего при сравнении в PowerShell произойдет сбой.

Я нашел TaxonomyItem.NormalizeName(String) Метод который описывает, что я могу нормализовать свой текст. Но я получаю сообщение об ошибке

Невозможно найти тип [Microsoft.SharePoint.Client.Taxonomy].

В моем скрипте PowerShell есть:

$Termname = [Microsoft.SharePoint.Client.Taxonomy]::NormalizeName($Context, $Termname) 

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

NormalizeName метод относится к TaxonomyItem class . Вот пример, как использовать его в PowerShell:

$result = [Microsoft.SharePoint.Client.Taxonomy.TaxonomyItem]::NormalizeName($Context, $Termname)
$Context.ExecuteQuery() #query needs to be executed in order to retrieve NormalizeName value 
Write-Host $result.Value

Иногда это может бытьболее удобно (с точки зрения производительности) избегать дополнительных запросов к серверу, тогда вместо этого можно использовать следующую функцию:

Function Normalize-Name([string]$Name) {
    if (!$Name) {
       return $null
    }  
    $trimSpacesRegex = new-object regex("\\s+",([System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::Compiled))
    return $trimSpacesRegex.Replace($Name, " ").Replace('&', [char]0xff06).Replace('"', [char]0xff02)
}

И

$encTermname = Normalize-Name -Name $Termname

должен возвращать тот же результат, что и TaxonomyItem.NormalizeName функция

0 голосов
/ 20 ноября 2018

При выполнении этого

$ Termname = [Microsoft.SharePoint.Client.Taxonomy] :: NormalizeName ($ Context, $ Termname)

станет пустым, но я должен выполнить контекстотдельно как:

$ context.ExecuteQuery ().

Это решило мою проблему.

...