I wanted to mark a meeting/appointment as completed via code. I came up with the PowerShell script below. Maybe it will be of use to some one?
FUNCTION JBM-CRM-SetState { PARAM( [string][ValidateSet("crmserver.company.com", "dev-crmserver.company.com")]$ServerName="crm.sardverb.com", [string][ValidateSet("CRMOrganizationName")]$OrganizationName="SardVerbinnen", [string][parameter(Mandatory=$true)][ValidateSet("email", "phonecall", "appointment")]$EntityType, [string][parameter(Mandatory=$true)][ValidateScript({ $_ -match("^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$")})]$TargetGUID, $State=1,$Status=3,[switch]$MyDebug ) $requestMain = "" $requestMain += "<s:Envelope xmlns:s=`"http://schemas.xmlsoap.org/soap/envelope/`">"; $requestMain += " <s:Body>"; $requestMain += " <Execute xmlns=`"http://schemas.microsoft.com/xrm/2011/Contracts/Services`" xmlns:i=`"http://www.w3.org/2001/XMLSchema-instance`">"; $requestMain += " <request i:type=`"b:SetStateRequest`" xmlns:a=`"http://schemas.microsoft.com/xrm/2011/Contracts`" xmlns:b=`"http://schemas.microsoft.com/crm/2011/Contracts`">"; $requestMain += " <a:Parameters xmlns:c=`"http://schemas.datacontract.org/2004/07/System.Collections.Generic`">"; $requestMain += " <a:KeyValuePairOfstringanyType>"; $requestMain += " <c:key>EntityMoniker</c:key>"; $requestMain += " <c:value i:type=`"a:EntityReference`">"; $requestMain += " <a:Id>$TargetGUID</a:Id>"; $requestMain += " <a:LogicalName>$EntityType</a:LogicalName>"; $requestMain += " <a:Name i:nil=`"true`" />"; $requestMain += " </c:value>"; $requestMain += " </a:KeyValuePairOfstringanyType>"; $requestMain += " <a:KeyValuePairOfstringanyType>"; $requestMain += " <c:key>State</c:key>"; $requestMain += " <c:value i:type=`"a:OptionSetValue`">"; $requestMain += " <a:Value>$State</a:Value>"; $requestMain += " </c:value>"; $requestMain += " </a:KeyValuePairOfstringanyType>"; $requestMain += " <a:KeyValuePairOfstringanyType>"; $requestMain += " <c:key>Status</c:key>"; $requestMain += " <c:value i:type=`"a:OptionSetValue`">"; $requestMain += " <a:Value>$Status</a:Value>"; $requestMain += " </c:value>"; $requestMain += " </a:KeyValuePairOfstringanyType>"; $requestMain += " </a:Parameters>"; $requestMain += " <a:RequestId i:nil=`"true`" />"; $requestMain += " <a:RequestName>SetState</a:RequestName>"; $requestMain += " </request>"; $requestMain += " </Execute>"; $requestMain += " </s:Body>"; $requestMain += "</s:Envelope>"; if ($MyDebug){write-host $requestMain} $url="http://$ServerName/$OrganizationName/XRMServices/2011/Organization.svc/web" $http_request = New-Object -ComObject Msxml2.XMLHTTP $http_request.Open('POST', $url, $false) $http_request.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"); $http_request.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); $http_request.setRequestHeader("Content-Length", $xml.length); $http_request.send($requestMain); if ($MyDebug){$http_request.responseText} }