locked
SharePointOnline PowerShell にて リスト列「ユーザまたはグループ」に登録 RRS feed

  • 質問

  • SharePointOnline PowerShell にて CSVファイルに登録されたメールアドレス一覧を、カスタムリスト内のリスト列「ユーザまたはグループ」にアップロードする処理がうまく作成できません。


    ※別方式として以下のURLを参考にしてもエラーになりました。
    https://social.msdn.microsoft.com/Forums/azure/en-US/8fb627d5-2953-4f17-8b49-adde7cd4703e/powershell-sharepoint-online-trying-to-add-a-user-to-a-custom-list-column-type-people-and-group?forum=sharepointdevelopment

    画面からリストに"aaa@xxx.co.jp"を入力するとアカウント情報に変換されて登録されますが
    PowerShellで実現するにはどうすれば良いのでしょうか?
    なお、リスト列「ユーザまたはグループ」の選択元は、すべてのユーザを設定しています。

    試したPowerShellの記述とエラー内容ですが、実現できるのであれば別方式でも構いません。


    #作成アイテムの情報設定
    $newItem = $list.AddItem($itemCreateInfo)
    $newItem["text1"] = "aaa@xxx.co.jp"
    $newItem.Update();
    $ctx.Load($newItem)
    #アイテム作成処理の実行
    $ctx.ExecuteQuery();

    "0" 個の引数を指定して "ExecuteQuery" を呼び出し中に例外が発生しました: "リスト アイテムの更新に無効なデータが使われて
    います。更新しようとしているフィールドは読み取り専用の可能性があります。"
    発生場所 ***:
    +             $ctx.ExecuteQuery();
    +             ~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : ServerException


    2018年1月29日 6:57

回答

  • しのはらさんお疲れ様です。

    以下の太字部分を追記して試したら無事に登録ができました。

    $user = $ctx.web.EnsureUser("aaa@xxx.co.jp")
    $ctx.Load($user)
    $ctx.ExecuteQuery()

    $newItem = $list.AddItem($itemCreateInfo)
    $newItem["text1"] = $user.Id
    $newItem.Update()
    $ctx.Load($newItem)
    $ctx.ExecuteQuery()


    ご協力ありがとうございました。
    2018年2月1日 9:38

すべての返信

  • こんにちは。

    内容から察するにCSOMのライブラリーを使っていると思いますが、ユーザーまたはグループ列の値を更新する場合は、ユーザーIDを指定する必要があります。

    $user = $web.EnsureUser("aaa@xxx.co.jp")
    $ctx.Load($user)
    $ctx.ExecuteQuery()
    
    $newItem = $list.AddItem($itemCreateInfo)
    $newItem["text1"] = $user.Id
    $newItem.Update()
    $ctx.Load($newItem)
    $ctx.ExecuteQuery()

    試していませんが。これでうまくいかないでしょうか?

    2018年1月31日 3:38
  • しのはらさんお疲れ様です。

    以下の太字部分を追記して試したら無事に登録ができました。

    $user = $ctx.web.EnsureUser("aaa@xxx.co.jp")
    $ctx.Load($user)
    $ctx.ExecuteQuery()

    $newItem = $list.AddItem($itemCreateInfo)
    $newItem["text1"] = $user.Id
    $newItem.Update()
    $ctx.Load($newItem)
    $ctx.ExecuteQuery()


    ご協力ありがとうございました。
    2018年2月1日 9:38