Set-ExecutionPolicy
–ExecutionPolicy RemoteSigned –Scope CurrentUser
Install-Module Microsoft.Xrm.Data.PowerShell
-Scope
CurrentUser
Import-Module
Microsoft.Xrm.Data.Powershell
$conn
=
Connect-CrmOnlineDiscovery
-InteractiveMode
Function
Add-SolutionComponent
{
param
(
[string]
$solutionuniquename
,
[Int32]
$componenttype
,
[Guid]
$componentid
)
$addrequest
=
new-object
Microsoft.Crm.Sdk.Messages.AddSolutionComponentRequest
$addrequest
.AddRequiredComponents = 0
$addrequest
.ComponentType =
$componenttype
$addrequest
.DoNotIncludeSubcomponents = 1
$addrequest
.ComponentId =
$componentid
$addrequest
.SolutionUniqueName =
$solutionuniquename
$response
=
$conn
.ExecuteCrmOrganizationRequest(
$addrequest
)
}
Function
Add-EntitiesToSolution
{
param
(
[string]
$solutionuniquename
,
[string[]]
$addentities
)
Write-Host
"Checking that solution exists '$solutionuniquename'"
$solution
=
Get-CrmRecords
-conn
$conn
-EntityLogicalName
solution
-FilterAttribute
uniquename
-FilterOperator
eq
-FilterValue
$solutionuniquename
-Fields
solutionid
$solutionid
=
$solution
.CrmRecords[0].solutionid
Write-Host
"Querying metdata to get entity id"
$entities
=
Get-CrmEntityAllMetadata
-conn
$conn
-EntityFilters
Entity
-OnlyPublished
$false
foreach
(
$entity
in
$entities
| ? {
$_
.LogicalName
-in
$addentities
})
{
$logicalName
=
$entity
.LogicalName
$count
= (
Get-CrmRecordsCount
-conn
$conn
-EntityLogicalName
$logicalName
-WarningAction
SilentlyContinue)
Write-Host
"Adding $logicalName"
Add-SolutionComponent
-solutionuniquename
$solutionuniquename
-componenttype
1
-componentid
$entity
.MetadataId
}
}
Add-EntitiesToSolution
-solutionuniquename
"TestSolution"
-addentities
"lead"
,
"account"
,
"contact"