Scripts/New-OctopusResource.ps1

<##
.Synopsis
   Creates a new Octopus Resource out of a resource Object.

   This is an advanced cmdlet and all its examples involve multiple lines of code. Please check the advanced examples for a better reference: https://github.com/Dalmirog/OctoPosh/wiki/Advanced-Examples
.DESCRIPTION
   Creates a new Octopus Resource out of a resource Object.

   This is an advanced cmdlet and all its examples involve multiple lines of code. Please check the advanced examples for a better reference: https://github.com/Dalmirog/OctoPosh/wiki/Advanced-Examples
.EXAMPLE
   $pg = Get-OctopusResourceModel -Resource ProjectGroup ; $pg.name = "NewProjectGroup" ; New-OctopusResource -Resource $pg

   Create a new Project Group called "NewProjectGroup" on Octopus
.LINK
   Github project: https://github.com/Dalmirog/Octoposh
   Wiki: https://github.com/Dalmirog/OctoPosh/wiki
   QA and Cmdlet request: https://gitter.im/Dalmirog/OctoPosh#initial
#>

function New-OctopusResource
{
    [CmdletBinding()]
    Param
    (
        # Resource Object
        [Parameter(Mandatory=$true,
                   ValueFromPipeline=$true,
                   Position=0)]
        $Resource
    )

    Begin
    {
        $c = New-OctopusConnection
    }
    Process
    {
        switch ($Resource)
        {
            {$_.getType() -eq [Octopus.Client.Model.ProjectGroupResource]} {$res = 'ProjectGroups'}
            {$_.getType() -eq [Octopus.Client.Model.ProjectResource]} {$res = 'Projects'}
            {$_.getType() -eq [Octopus.Client.Model.EnvironmentResource]} {$res = 'Environments'}
            {$_.getType() -eq [Octopus.Client.Model.FeedResource]} {$res = 'Feeds'}
            {$_.getType() -eq [Octopus.Client.Model.LibraryVariableSetResource]} {$res = 'LibraryVariableSets'}
            {$_.getType() -eq [Octopus.Client.Model.MachineResource]} {$res = 'Machines'}
            {$_.getType() -eq [Octopus.Client.Model.LifecycleResource]} {$res = 'Lifecycles'}
            {$_.getType() -eq [Octopus.Client.Model.UserResource]} {$res = 'Users'}
            {$_.getType() -eq [Octopus.Client.Model.TeamResource]} {$res = 'Teams'}
            Default{Throw "Invalid object type: $($_.getType()) `nRun 'Get-OctopusResourceModel -ListAvailable' to get a list of the object types accepted by this cmdlet"}
        }
        Write-Verbose "[$($MyInvocation.MyCommand)] Creating an $($resource.GetType()) object"
        $newres = $c.repository.$res.Create($resource)
    }
    End
    {
        return $newres
    }
}