I want to be able to pass multiple parameters to the function but keep getting an error that I can’t see why I’m getting it.
The parameter "SqlServer" is declared in parameter-set "__AllParameterSets" multiple times.
I’m using this Command:
@([pscustomobject]@{ SqlServer = "hostserver\sqlinstance" Database = "databasename" }) | Recover-LogSpace
To call this function:
Function Recover-LogSpace { [CmdletBinding(DefaultParameterSetName="Multiple")] Param( [parameter(Mandatory=$true,Position=0)] [Parameter(ParameterSetName='Multiple')] [parameter(ParameterSetName='Single')] [parameter(ValuefromPipeline=$True,ValueFromPipelineByPropertyName=$true)] [string[]]$SqlServer, [parameter(Mandatory=$false,Position=1)] [parameter(ParameterSetName='Single')] [parameter(ValuefromPipeline=$True,ValueFromPipelineByPropertyName=$true)] [string[]]$Database ) BEGIN { # https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.management.smo.shrinkmethod?view=sqlserver-2016 [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null } PROCESS { foreach($server in $SqlServer) { $srv = New-Object Microsoft.SqlServer.Management.Smo.Server $Server if($Database) { $srv.Databases[$Database] | ?{ $_.Shrink(2,[Microsoft.SqlServer.Management.Smo.ShrinkMethod]'TruncateOnly') } } else { $srv.Databases | ?{ $_.ID -gt "4" -And $_.IsAccessible -eq $True -And $_.ReadOnly -eq $False } | ?{ $_.Shrink(2,[Microsoft.SqlServer.Management.Smo.ShrinkMethod]'TruncateOnly') } } } } END { } }