У меня есть функция, которая должна принимать либо набор имен серверов и баз данных, либо имен серверов, а также просматривать базы данных и сокращать их журналы транзакций.Когда я запускаю его, передавая набор имен серверов и баз данных, он работает нормально, когда я запускаю его, передавая только набор имен серверов, он не работает должным образом.
Я называю это так:
@([pscustomobject]@{
SqlServer = "sqlserver1\instance"
}) ,
@([pscustomobject]@{
SqlServer = "sqlserver2\instance"
}) | Recover-LogSpace
Я получаю следующие сообщения:
Working on database @{SqlServer=sqlserver2\instance}
Connecting to @{SqlServer=sqlserver1\instance}
Working on database @{SqlServer=Tsqlserver1\instance}
Функция:
Function Recover-LogSpace
{
[CmdletBinding()]
Param(
[parameter(ParameterSetName='Multiple')]
[parameter(ValueFromPipelineByPropertyName=$true,ValuefromPipeline=$True,ParameterSetName='Single')]
[string[]]$SqlServer,
[parameter(ParameterSetName='Single')]
[parameter(ValueFromPipelineByPropertyName=$true,ValuefromPipeline=$True)]
[string[]]$Database
)
BEGIN {
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
}
PROCESS {
foreach($server in $SqlServer) {
"Connecting to $server"
$srv = New-Object Microsoft.SqlServer.Management.Smo.Server $Server
if($Database) {
"Working on database $Database"
$srv.Databases[$Database] | ?{ $_.Shrink(2,[Microsoft.SqlServer.Management.Smo.ShrinkMethod]'TruncateOnly') }
}
else {
"Working on all databases on server"
$srv.Databases | ?{ $_.ID -gt "4" -And $_.IsAccessible -eq $True -And $_.ReadOnly -eq $False } | ?{ $_.Shrink(2,[Microsoft.SqlServer.Management.Smo.ShrinkMethod]'TruncateOnly') }
}
}
}
END {
}
}