Public/Admin.ps1
|
function Get-CrmEntityRecordCount{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1)] [string]$EntityLogicalName ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $count = 0 $query = New-Object -TypeName 'Microsoft.Xrm.Sdk.Query.QueryExpression' $pageInfo = New-Object -TypeName 'Microsoft.Xrm.Sdk.Query.PagingInfo' $query.EntityName = $EntityLogicalName $pageInfo.Count = 5000 $pageInfo.PageNumber = 1 $pageInfo.PagingCookie = $null $query.PageInfo = $pageInfo while($True) { $request = New-Object -TypeName 'Microsoft.Xrm.Sdk.Messages.RetrieveMultipleRequest' $request.Query = $query try { $result = $conn.Execute($request) if($result -eq $null) { throw $_.Exception } } catch { throw $_.Exception } $count += $result.EntityCollection.Entities.Count if($result.EntityCollection.MoreRecords) { $pageInfo.PageNumber += 1 $pageInfo.PagingCookie = $result.EntityCollection.PagingCookie } else { break } } return $count } function Get-CrmLicenseSummary{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="systemuser"> <attribute name="islicensed" /> <attribute name="accessmode" /> <attribute name="caltype" /> <filter type='and'> <condition attribute='accessmode' operator='ne' value='3' /> <condition attribute='domainname' operator='ne' value='' /> </filter> </entity> </fetch> "@; $users = Get-CrmRecordsByFetch -conn $conn -Fetch $fetch; Write-Output 'IsLicensed:' ($users.CrmRecords | group islicensed | select count, name); Write-Output 'AccessMode:' ($users.CrmRecords | group accessmode | select count, name); Write-Output 'CalType:' ($users.CrmRecords | group accessmode | select count, name); } function Get-CrmOrgDbOrgSettings{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="organization"> <attribute name="orgdborgsettings" /> </entity> </fetch> "@ $result = Get-CrmRecordsByFetch -conn $conn -Fetch $fetch $record = $result.CrmRecords[0] if($record.orgdborgsettings -eq $null) { Write-Warning 'No settings found.' } else { $xml = [xml]$record.orgdborgsettings return $xml.SelectSingleNode("/OrgSettings") } } function Get-CrmSdkMessageProcessingStepsForPluginAssembly{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1)] [string]$PluginAssemblyName, [parameter(Mandatory=$false, Position=2)] [switch]$OnlyCustomizable ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) if($OnlyCustomizable){ $isCustom = "<value>1</value>" } else { $isCustom = "<value>0</value><value>1</value>" } $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="sdkmessageprocessingstep"> <all-attributes/> <link-entity name="sdkmessagefilter" from="sdkmessagefilterid" to="sdkmessagefilterid" visible="false" link-type="outer" alias="a1"> <attribute name="secondaryobjecttypecode" /> <attribute name="primaryobjecttypecode" /> </link-entity> <link-entity name="plugintype" from="plugintypeid" to="plugintypeid" alias="ab"> <filter type="and"> <condition attribute="assemblyname" operator="eq" value="{0}" /> </filter> </link-entity> <filter type="and"> <condition attribute="iscustomizable" operator="in"> {1} </condition> </filter> </entity> </fetch> "@ -F $PluginAssemblyName, $isCustom $results = (Get-CrmRecordsByFetch -conn $conn -Fetch $fetch).CrmRecords return $results } function Get-CrmSiteMap{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$false, ParameterSetName="ShowXml")] [switch]$SiteXml, [parameter(Mandatory=$false, ParameterSetName="ShowArea")] [switch]$Areas, [parameter(Mandatory=$false, ParameterSetName="ShowGroupOfArea")] [string]$GroupsOfArea, [parameter(Mandatory=$false, ParameterSetName="ShowSubAreaOfArea")] [string]$SubAreasOfArea ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="sitemap"> <attribute name="sitemapxml" /> </entity> </fetch> "@ $record = (Get-CrmRecordsByFetch -conn $conn -Fetch $fetch).CrmRecords[0] $sitemap = [xml]$record.sitemapxml if($SiteXml.IsPresent) { return $sitemap.InnerXml } if($Areas.IsPresent) { return $sitemap.SelectNodes("/SiteMap").Area.Id } if($GroupsOfArea.Length -ne 0) { return $sitemap.SelectNodes("/SiteMap/Area[@Id='$GroupsOfArea']/Group").Id } if($SubAreasOfArea.Length -ne 0) { return $sitemap.SelectNodes("/SiteMap/Area[@Id='$SubAreasOfArea']/Group/SubArea").Id } } function Get-CrmSystemSettings{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$false)] [switch]$ShowDisplayName ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="organization"> <all-attributes /> </entity> </fetch> "@ $record = (Get-CrmRecordsByFetch -conn $conn -Fetch $fetch).CrmRecords[0] $attributes = Get-CrmEntityAttributes -conn $conn -EntityLogicalName organization $psobj = New-Object -TypeName System.Management.Automation.PSObject foreach($att in $record.original.Attributes) { if(($att.Key.Contains("Property")) -or ($att.Key -eq "organizationid") -or ($att.Key.StartsWith("ReturnProperty_")) -or ($att.Key -eq "logicalname") -or ($att.Key -eq "original")) { continue } if($att.Key -eq "defaultemailsettings") { if($ShowDisplayName) { $name = ($attributes | where {$_.LogicalName -eq $att.Key}).Displayname.UserLocalizedLabel.Label + ":" +((Get-CrmEntityOptionSet -conn $conn mailbox incomingemaildeliverymethod).DisplayValue) } else { $name = "defaultemailsettings:incomingemaildeliverymethod" } Add-Member -InputObject $psobj -MemberType NoteProperty -Name $name -Value ((Get-CrmEntityOptionSet -conn $conn mailbox incomingemaildeliverymethod).Items.DisplayLabel)[([xml]$att.Value).FirstChild.IncomingEmailDeliveryMethod] if($ShowDisplayName) { $name = ($attributes | where {$_.LogicalName -eq $att.Key}).Displayname.UserLocalizedLabel.Label + ":" +((Get-CrmEntityOptionSet -conn $conn mailbox outgoingemaildeliverymethod).DisplayValue) } else { $name = "defaultemailsettings:outgoingemaildeliverymethod" } Add-Member -InputObject $psobj -MemberType NoteProperty -Name $name -Value ((Get-CrmEntityOptionSet -conn $conn mailbox outgoingemaildeliverymethod).Items.DisplayLabel)[([xml]$att.Value).FirstChild.OutgoingEmailDeliveryMethod] if($ShowDisplayName) { $name = ($attributes | where {$_.LogicalName -eq $att.Key}).Displayname.UserLocalizedLabel.Label + ":" +((Get-CrmEntityOptionSet -conn $conn mailbox actdeliverymethod).DisplayValue) } else { $name = "defaultemailsettings:actdeliverymethod" } Add-Member -InputObject $psobj -MemberType NoteProperty -Name $name -Value ((Get-CrmEntityOptionSet -conn $conn mailbox actdeliverymethod).Items.DisplayLabel)[([xml]$att.Value).FirstChild.ACTDeliveryMethod] continue } if($ShowDisplayName) { $name = ($attributes | where {$_.LogicalName -eq $att.Key}).Displayname.UserLocalizedLabel.Label if($name -eq $null) { $name = ($attributes | where {$_.LogicalName -eq $att.Key}).SchemaName } } else { $name = ($attributes | where {$_.LogicalName -eq $att.Key}).SchemaName } if($name -eq $null){ Write-Warning "SKIPPING Property: $($att.Key)" } else{ Add-Member -InputObject $psobj -MemberType NoteProperty -Name $name -Value $record.($att.Key) } } return $psobj } function Get-CrmTimeZones{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="timezonedefinition"> <attribute name="standardname" /> <attribute name="timezonecode" /> <attribute name="userinterfacename" /> <order attribute="timezonecode" descending="false" /> </entity> </fetch> "@ $results = Get-CrmRecordsByFetch -conn $conn -Fetch $fetch return $results.CrmRecords | select @{name="Timezone Name";expression={$_.userinterfacename}},@{name="TimeZone Code";expression={$_.timezonecode}} } function Get-CrmTraceAlerts{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="tracelog"> <attribute name="level" /> <attribute name="regardingobjectid" /> <attribute name="createdon" /> <attribute name="modifiedon" /> <attribute name="tracecode" /> <attribute name="text" /> <attribute name="modifiedby" /> <attribute name="createdby" /> <order attribute="modifiedon" descending="true" /> </entity> </fetch> "@ $results = Get-CrmRecordsByFetch -conn $conn -Fetch $fetch if($results.CrmRecords.Count -eq 0) { Write-Warning 'No alert found.' } else { return $results } } function Set-CrmConnectionCallerId{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, position=1)][Alias("UserId")] [guid]$CallerId ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $conn.CallerId = $CallerId } function Set-CrmSystemSettings { # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$false)] [guid]$AcknowledgementTemplateId, [parameter(Mandatory=$false)] [int]$ACTDeliveryMethod, [parameter(Mandatory=$false)] [bool]$AllowAddressBookSyncs, [parameter(Mandatory=$false)] [bool]$AllowAutoResponseCreation, [parameter(Mandatory=$false)] [bool]$AllowAutoUnsubscribe, [parameter(Mandatory=$false)] [bool]$AllowAutoUnsubscribeAcknowledgement, [parameter(Mandatory=$false)] [bool]$AllowClientMessageBarAd, [parameter(Mandatory=$false)] [bool]$AllowEntityOnlyAudit, [parameter(Mandatory=$false)] [bool]$AllowMarketingEmailExecution, [parameter(Mandatory=$false)] [bool]$AllowOfflineScheduledSyncs, [parameter(Mandatory=$false)] [bool]$AllowOutlookScheduledSyncs, [parameter(Mandatory=$false)] [bool]$AllowUnresolvedPartiesOnEmailSend, [parameter(Mandatory=$false)] [bool]$AllowUserFormModePreference, [parameter(Mandatory=$false)] [bool]$AllowUsersSeeAppdownloadMessage, [parameter(Mandatory=$false)] [bool]$AllowWebExcelExport, [parameter(Mandatory=$false)] [string]$AMDesignator, [parameter(Mandatory=$false)] [bool]$AutoApplyDefaultonCaseCreate, [parameter(Mandatory=$false)] [bool]$AutoApplyDefaultonCaseUpdate, [parameter(Mandatory=$false)] [bool]$AutoApplySLA, [parameter(Mandatory=$false)] [string]$BingMapsApiKey, [parameter(Mandatory=$false)] [string]$BlockedAttachments, [parameter(Mandatory=$false)] [guid]$BusinessClosureCalendarId, [parameter(Mandatory=$false)] [string]$CampaignPrefix, [parameter(Mandatory=$false)] [bool]$CascadeStatusUpdate, [parameter(Mandatory=$false)] [string]$CasePrefix, [parameter(Mandatory=$false)] [string]$ContractPrefix, [parameter(Mandatory=$false)] [bool]$CortanaProactiveExperienceEnabled, [parameter(Mandatory=$false)] [bool]$CreateProductsWithoutParentInActiveState, [parameter(Mandatory=$false)] [int]$CurrencyDecimalPrecision, [parameter(Mandatory=$false)] [int]$CurrencyDisplayOption, [parameter(Mandatory=$false)] [int]$CurrentCampaignNumber, [parameter(Mandatory=$false)] [int]$CurrentCaseNumber, [parameter(Mandatory=$false)] [int]$CurrentContractNumber, [parameter(Mandatory=$false)] [int]$CurrentInvoiceNumber, [parameter(Mandatory=$false)] [int]$CurrentKbNumber, [parameter(Mandatory=$false)] [int]$CurrentOrderNumber, [parameter(Mandatory=$false)] [int]$CurrentQuoteNumber, [parameter(Mandatory=$false)] [ValidatePattern('\+{1}\d{1,}')] [string]$DefaultCountryCode, [parameter(Mandatory=$false)] [guid]$DefaultEmailServerProfileId, [parameter(Mandatory=$false)] [bool]$DisableSocialCare, [parameter(Mandatory=$false)] [bool]$DisplayNavigationTour, [parameter(Mandatory=$false)] [int]$EmailConnectionChannel, [parameter(Mandatory=$false)] [int]$EmailCorrelationEnabled, [parameter(Mandatory=$false)] [bool]$EnableBingMapsIntegration, [parameter(Mandatory=$false)] [bool]$EnableSmartMatching, [parameter(Mandatory=$false)] [int]$FullNameConventionCode, [parameter(Mandatory=$false)] [bool]$GenerateAlertsForErrors, [parameter(Mandatory=$false)] [bool]$GenerateAlertsForWarnings, [parameter(Mandatory=$false)] [bool]$GenerateAlertsForInformation, [parameter(Mandatory=$false)] [bool]$GlobalAppendUrlParametersEnabled, [parameter(Mandatory=$false)] [ValidatePattern('http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?')] [string]$GlobalHelpUrl, [parameter(Mandatory=$false)] [bool]$GlobalHelpUrlEnabled, [parameter(Mandatory=$false)] [int]$HashDeltaSubjectCount, [parameter(Mandatory=$false)] [string]$HashFilterKeywords, [parameter(Mandatory=$false)] [int]$HashMaxCount, [parameter(Mandatory=$false)] [int]$HashMinAddressCount, [parameter(Mandatory=$false)] [bool]$IgnoreInternalEmail, [parameter(Mandatory=$false)] [int]$IncomingEmailDeliveryMethod, [parameter(Mandatory=$false)] [string]$InvoicePrefix, [parameter(Mandatory=$false)] [bool]$IsAutoSaveEnabled, [parameter(Mandatory=$false)] [bool]$IsDefaultCountryCodeCheckEnabled, [parameter(Mandatory=$false)] [bool]$IsDuplicateDetectionEnabled, [parameter(Mandatory=$false)] [bool]$IsDuplicateDetectionEnabledForImport, [parameter(Mandatory=$false)] [bool]$IsDuplicateDetectionEnabledForOfflineSync, [parameter(Mandatory=$false)] [bool]$IsDuplicateDetectionEnabledForOnlineCreateUpdate, [parameter(Mandatory=$false)] [bool]$isenabledforallroles, [parameter(Mandatory=$false)] [bool]$IsFolderBasedTrackingEnabled, [parameter(Mandatory=$false)] [bool]$IsFullTextSearchEnabled, [parameter(Mandatory=$false)] [bool]$IsHierarchicalSecurityModelEnabled, [parameter(Mandatory=$false)] [bool]$IsPresenceEnabled, [parameter(Mandatory=$false)] [bool]$IsUserAccessAuditEnabled, [parameter(Mandatory=$false)] [string]$KbPrefix, [parameter(Mandatory=$false)] [int]$MaxAppointmentDurationDays, [parameter(Mandatory=$false)] [int]$MaxDepthForHierarchicalSecurityModel, [parameter(Mandatory=$false)] [int]$MaximumActiveBusinessProcessFlowsAllowedPerEntity, [parameter(Mandatory=$false)] [int]$MaximumDynamicPropertiesAllowed, [parameter(Mandatory=$false)] [int]$MaximumTrackingNumber, [parameter(Mandatory=$false)] [int]$MaxProductsInBundle, [parameter(Mandatory=$false)] [int]$MaxRecordsForExportToExcel, [parameter(Mandatory=$false)] [int]$MaxRecordsForLookupFilters, [parameter(Mandatory=$false)] [int]$MaxUploadFileSize, [parameter(Mandatory=$false)] [int]$MinAddressBookSyncInterval, [parameter(Mandatory=$false)] [int]$MinOfflineSyncInterval, [parameter(Mandatory=$false)] [int]$MinOutlookSyncInterval, [parameter(Mandatory=$false)] [bool]$NotifyMailboxOwnerOfEmailServerLevelAlerts, [parameter(Mandatory=$false)] [string]$OrderPrefix, [parameter(Mandatory=$false)] [int]$OutgoingEmailDeliveryMethod, [parameter(Mandatory=$false)] [ValidateSet(0,1,2)] [int]$PluginTraceLogSetting, [parameter(Mandatory=$false)] [ValidateSet(0,1,2,3,4)] [int]$PricingDecimalPrecision, [parameter(Mandatory=$false)] [bool]$QuickFindRecordLimitEnabled, [parameter(Mandatory=$false)] [string]$QuotePrefix, [parameter(Mandatory=$false)] [bool]$RequireApprovalForUserEmail, [parameter(Mandatory=$false)] [bool]$RequireApprovalForQueueEmail, [parameter(Mandatory=$false)] [bool]$ShareToPreviousOwnerOnAssign, [parameter(Mandatory=$false)] [string]$TrackingPrefix, [parameter(Mandatory=$false)] [int]$TrackingTokenIdBase, [parameter(Mandatory=$false)] [int]$TrackingTokenIdDigits, [parameter(Mandatory=$false)] [int]$UniqueSpecifierLength, [parameter(Mandatory=$false)] [bool]$UseLegacyRendering, [parameter(Mandatory=$false)] [bool]$UsePositionHierarchy, [parameter(Mandatory=$false)] [bool]$UseSkypeProtocol, [parameter(Mandatory=$false)] [bool]$UseAllowUsersSeeAppdownloadMessage, [parameter(Mandatory=$false)] [string]$DefaultCrmCustomName, [parameter(Mandatory=$false)] [bool]$SuppressSLA, [parameter(Mandatory=$false)] [bool]$IsAuditEnabled, [parameter(Mandatory=$false)] [bool]$AllowLegacyClientExperience ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) $updateFields = @{} $attributesMetadata = Get-CrmEntityAttributes -conn $conn -EntityLogicalName organization $defaultEmailSettings = @{} foreach($parameter in $MyInvocation.BoundParameters.GetEnumerator()) { $attributeMetadata = $attributesMetadata | ? {$_.SchemaName -eq $parameter.Key} if($parameter.Key -in ("IncomingEmailDeliveryMethod","OutgoingEmailDeliveryMethod","ACTDeliveryMethod")) { $defaultEmailSettings.Add($parameter.Key,$parameter.Value) } elseif($attributeMetadata -eq $null) { continue } elseif($attributeMetadata.AttributeType -eq "Picklist") { $updateFields.Add($parameter.Key.ToLower(), (New-CrmOptionSetValue $parameter.Value)) } elseif($attributeMetadata.AttributeType -eq "Lookup") { $updateFields.Add($parameter.Key.ToLower(), (New-CrmEntityReference emailserverprofile $parameter.Value)) } else { $updateFields.Add($parameter.Key.ToLower(), $parameter.Value) } } $fetch = @" <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" no-lock="true"> <entity name="organization"> <attribute name="organizationid" /> <attribute name="defaultemailsettings" /> </entity> </fetch> "@ $systemSettings = (Get-CrmRecordsByFetch -conn $conn -Fetch $fetch).CrmRecords[0] $recordid = $systemSettings.organizationid if($defaultEmailSettings.Count -ne 0) { $emailSettings = [xml]$systemSettings.defaultemailsettings if($defaultEmailSettings.ContainsKey("IncomingEmailDeliveryMethod")) { $emailSettings.EmailSettings.IncomingEmailDeliveryMethod = [string]$defaultEmailSettings["IncomingEmailDeliveryMethod"] } if($defaultEmailSettings.ContainsKey("OutgoingEmailDeliveryMethod")) { $emailSettings.EmailSettings.OutgoingEmailDeliveryMethod = [string]$defaultEmailSettings["OutgoingEmailDeliveryMethod"] } if($defaultEmailSettings.ContainsKey("ACTDeliveryMethod")) { $emailSettings.EmailSettings.ACTDeliveryMethod = [string]$defaultEmailSettings["ACTDeliveryMethod"] } $updateFields.Add("defaultemailsettings",$emailSettings.OuterXml) } Set-CrmRecord -conn $conn -EntityLogicalName organization -Id $recordid -Fields $updateFields } |