SharePoint에서 참조 열의 대상 목록을 변경하고 싶습니다.
4791 단어 SharePointPowerShell
목록을 템플릿화한 것을 다른 사이트에 배포했습니다. 그러나 참조 열을 포함하는 것을 잊었고 참조 열을 선택할 수 없습니다.
GUI에서 참조 소스 목록을 변환 할 수 없기 때문에 열의 SchemaXml을 바라 보면 변경할 수 있다고 생각했습니다. (SchemaXml을 보는 방법은 여기)
참조 열의 SchemaXml 확인
시험에 리스트를 만들어, 다른 리스트의 「작성 일시」를 이용해 참조열 작성해 보았습니다.
그 SchemaXml이 여기에 있습니다.
<Field
Type="Lookup"
DisplayName="参照(日付と時刻)"
Required="FALSE"
EnforceUniqueValues="FALSE"
List="{f5bb4f52-e0a7-4c25-abab-a3d261fde470}"
ShowField="Created"
UnlimitedLengthInDocumentLibrary="FALSE"
RelationshipDeleteBehavior="None"
ID="{55843724-0221-4ae3-ad18-414edd209754}"
SourceID="{aca9e366-bd2b-4060-bd63-342e18395df7}"
StaticName="testLookupDatetime"
Name="testLookupDatetime"
ColName="int3"
RowOrdinal="0"
Version="2"
Group="" />
이 안에 36 문자의 영숫자와 하이픈으로 생긴 캐릭터 라인을 {} 로 둘러싸고 있는 GUID 가 3 개 있습니다.
참조 목록 목록 ID
열 특정 ID
이 열이있는 목록의 목록 ID
참조하는 열의 내부 이름 라고 생각해 보았습니다.
SchemaXml의 List 특성을 PowerShell로 다시 작성
아래와 같이 가정하여 샘플 코드를 올립니다.
미야미야@에에mpぇ. 이 m
https://.sharepoint.com/sites/example
참조 열이 있습니다. 목록
LookupDate
나를보고 목록
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null
# 取得する SharePoint Online の URL
$url = 'https://<tenant>.sharepoint.com/sites/example'
# ユーザー名
$user = '[email protected]';
# パスワード
$secure = Read-Host -Prompt "Enter the password for ${user}(Office365)" -AsSecureString;
# SharePoint Online 認証情報
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($user, $secure);
# SharePoint Client Context インスタンスを生成
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$ctx.Credentials = $credentials
여기까지는 평소의 엉망인 코드.
로그인하여 SharePoint Client Context의 인스턴스를 만드는 중입니다.
여기서부터 본명의 코드.
# 更新リスト名
$targetListName = '参照列持ってるぜリスト';
# 更新列
$targetFields = @('LookupDate');
# 新参照先リスト名
$toLookupListName = '私を見てリスト'
# 新参照先リスト ID 取得
$toList = $ctx.Web.Lists.GetByTitle($toLookupListName)
$ctx.Load($toList)
# 更新列の読み込み予約
$fieldsContainer = @()
foreach($fieldName in $targetFields) {
$field = $ctx.Web.Lists.GetByTitle($targetListName).Fields.GetByInternalNameOrTitle($fieldName)
$ctx.Load($field)
$fieldsContainer += $field
}
# 読み込み実行
$ctx.ExecuteQuery()
# 参照先リストの書き換え
foreach($field in $fieldsContainer) {
# SchemaXml の List 属性の値を、新参照先リストのリスト ID に書き換え
$field.SchemaXml = $field.SchemaXml -replace 'List="(.*?)"', ('List="{'+ $toList.Id + '}"')
}
# 書き換え実行
$ctx.ExecuteQuery()
실제로는 좀 깨끗한 스크립트로 하고 있습니다만( 변명)
고찰
일단 수중에서는 움직이고 있습니다만, 이것으로 좋은 것인가? 라는 의문과 어지럽히면 되돌릴 수 없게 될 것 같으므로, 참고로하는 기특한 분이 있으면 백업을 취해 자기 책임으로 부탁합니다
_(:3」∠)_
Reference
이 문제에 관하여(SharePoint에서 참조 열의 대상 목록을 변경하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miyamiya/items/c73d54c3343d2af86121텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)