[exchangengewebservices] исключение, вызывающее «обновление» с аргументом (ами) «0»: «операция изменит тип объекта, что не разрешено».

Моя цель - либо изменить класс папки общих папок, либо создать новую общую папку в качестве контакта (невозможно с new-publicfolder). поэтому я взял несколько отрывков из glens ews.

function FolderIdFromPath{
param (
        $FolderPath = "$( throw 'Folder Path is a mandatory Parameter' )"
      )
process{


        ## Find and Bind to Folder based on Path  
    #Define the path to search should be seperated with \  
    $folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::PublicFoldersRoot)   
    $tfTargetFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)  
    #Split the Search path into an array  
    $fldArray = $FolderPath.Split("\") 
     #Loop through the Split Array and do a Search for each level of folder 
    for ($lint = 1; $lint -lt $fldArray.Length; $lint++) { 
        #Perform search based on the displayname of each folder level 
        $fvFolderView = new-object Microsoft.Exchange.WebServices.Data.FolderView(1) 
        $SfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,$fldArray[$lint]) 
        $findFolderResults =  $service.FindFolders($tfTargetFolder.Id,$SfSearchFilter,$fvFolderView) 
        if ($findFolderResults.TotalCount -gt 0){ 
            foreach($folder in $findFolderResults.Folders){ 
                $tfTargetFolder = $folder                
            } 
        } 
        else{ 
            "Error Folder Not Found"  
            return $null
        }     
    }  
    if($tfTargetFolder -ne $null){
        return $tfTargetFolder.Id.UniqueId.ToString()
    }
}
}
#Example use
$fldId = FolderIdFromPath -FolderPath "\my\folder"

$Subfolderid = new-objectMicrosoft.Exchange.WebServices.Data.FolderId($fldId) 
$SubFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$SubFolderId)
$subfolder.FolderClass = "IPF.Contact"

$SubFolder.update()

Исключение, вызывающее «Обновление» с аргументом (ами) «0»: «Операция изменит тип объекта, что не разрешено».

$SubFolder.update() Exception calling "Update" with "0" argument(s): "Operation would change object type, which is not permitted."

Однако это не удается. Это проблема с разрешением или что-то не так в источнике?

заранее спасибо.

0
0
124
2

Ответы 2

Ваш код довольно запутан, но, если я правильно понимаю, вы в основном выполняете GetOrCreate для папки с типом «IPF.Contact». Если папка существует, попробуйте обновить тип.

Как говорится в ошибке, вы не можете изменить базовый тип объекта после его создания. Вы также можете увидеть это, если используете EWS для чтения элемента контакта как элемента электронной почты, а затем пытаетесь его сохранить.

Вам нужно будет создать папку с предполагаемым типом.

Я попытался обновить существующую пустую общую папку. Новая попытка - создать новую общую папку с правильным типом папки. Я использую ту же функцию, что и раньше, чтобы получить идентификатор папки для родительской папки. Также не удается:

    $fldId = FolderIdFromPath -FolderPath "\my\folder"
    $EWSParentFolder = $null
    $NewFolder = new-object Microsoft.Exchange.WebServices.Data.Folder($service)  
    $NewFolder.DisplayName = "test123"
    $NewFolder.FolderClass = "IPF.Contact"
    $ParentFolderId =  new-object Microsoft.Exchange.WebServices.Data.FolderId($fldId.id)
    $EWSParentFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$ParentFolderId)       
    $NewFolder.Save($EWSParentFolder.Id)  

сообщение об ошибке: исключение, вызывающее «Bind» с «2» аргументом (ами): «Id неверен». -получил: Microsoft.Exchange.WebServices.Data.FolderId () должен быть инициализирован с помощью $ fldid.id!

Другие вопросы по теме