& {
$ErrorActionPreference = "Stop"
# 接続先を確認
$web = Get-PnPWeb
if ($web.Url.TrimEnd("/") -ne "https://vsn365.sharepoint.com/sites/kume_test") {
throw "接続先が想定と異なります: $($web.Url)"
}
# 既存リストがあれば停止
$existing = @(Get-PnPList)
foreach ($name in @("BoardThreads", "BoardReplies")) {
if ($existing.Title -contains $name) {
throw "$name は既に存在します。作成処理を停止しました。"
}
}
# リスト作成
New-PnPList -Title "BoardThreads" -Template GenericList | Out-Null
New-PnPList -Title "BoardReplies" -Template GenericList | Out-Null
# 両方に共通する列
foreach ($name in @("BoardThreads", "BoardReplies")) {
# 本文:複数行、プレーンテキスト
Add-PnPFieldFromXml -List $name -FieldXml '
<Field Type="Note"
Name="Body"
StaticName="Body"
DisplayName="Body"
RichText="FALSE"
AppendOnly="FALSE"
NumLines="6" />
' | Out-Null
# 削除フラグ:既定値「いいえ」
Add-PnPFieldFromXml -List $name -FieldXml '
<Field Type="Boolean"
Name="IsDeleted"
StaticName="IsDeleted"
DisplayName="IsDeleted">
<Default>0</Default>
</Field>
' | Out-Null
}
# スレッド:カテゴリ
Add-PnPField -List "BoardThreads" `
-DisplayName "Category" `
-InternalName "Category" `
-Type Choice `
-Choices "質問","雑談","要望","お知らせ" `
-AddToDefaultView | Out-Null
# 返信:親スレッドID(数値・小数点以下0桁)
Add-PnPFieldFromXml -List "BoardReplies" -FieldXml '
<Field Type="Number"
Name="ThreadId"
StaticName="ThreadId"
DisplayName="ThreadId"
Decimals="0" />
' | Out-Null
# 返信側のTitleは入力任意にする
Set-PnPField -List "BoardReplies" `
-Identity "Title" `
-Values @{ Required = $false } | Out-Null
Write-Host "2つのリストと列を作成しました。" -ForegroundColor Green
# 列の確認
foreach ($name in @("BoardThreads", "BoardReplies")) {
Write-Host "`n[$name]" -ForegroundColor Cyan
Get-PnPField -List $name |
Where-Object {
$_.InternalName -in @(
"Title", "Body", "Category", "ThreadId", "IsDeleted"
)
} |
Select-Object InternalName, TypeAsString, Required, DefaultValue |
Format-Table -AutoSize
}
}