New-SSRSWebServiceProxy.ps1

Function New-SSRSWebServiceProxy
{
    #requires -version 2.0
    [CmdletBinding()]
    param (
        [parameter(Mandatory=$true)]
        [ValidatePattern('^https?://')]
        [string]
        $Uri,

        [System.Management.Automation.PSCredential]
        $Credential
    )

    $script:ErrorActionPreference = 'Stop'
    Set-StrictMode -Version Latest

    if (-not $Uri.EndsWith('.asmx')) {
        if (-not $Uri.EndsWith('/')) {
            $Uri += '/'
        }
        $Uri += 'ReportService2010.asmx'
    }

    $Assembly = [AppDomain]::CurrentDomain.GetAssemblies() |
        Where-Object {
            $_.GetType('SSRS.ReportingService2010.ReportingService2010')
        }
    if (($Assembly | Measure-Object).Count -gt 1) {
        throw 'AppDomain contains multiple definitions of the same type. Restart PowerShell host.'
    }

    if (-not $Assembly) {

        if ($Credential) {
            $CredParams = @{ Credential = $Credential }
        } else {
            $CredParams = @{ UseDefaultCredential = $true }
        }
        $Proxy = New-WebServiceProxy -Uri $Uri -Namespace SSRS.ReportingService2010 @CredParams

    } else {

        $Proxy = New-Object -TypeName SSRS.ReportingService2010.ReportingService2010
        if ($Credential) {
            $Proxy.Credentials = $Credential.GetNetworkCredential()
        } else {
            $Proxy.UseDefaultCredentials = $true
        }

    }

    $Proxy.Url = $Uri
    return $Proxy
}