Я хочу иметь возможность передавать несколько значений по конвейеру для модуля, который я собираю.Модуль построен на основе определенной схемы базы данных SQL, поэтому я разработал эту функцию для возврата всех баз данных этой схемы:
function Get-TRISDatabases {
param (
[parameter(mandatory=$false)]
[string]$ServerAddress = "localhost",
[parameter(mandatory=$false)]
[switch]$Name
)
Begin {
$Query_GetDatabases = "
SELECT Name, create_date, user_access_desc, state_desc, recovery_model_desc FROM sys.databases WHERE CASE
WHEN state_desc = 'ONLINE' THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[CRISFiles]', 'U')
END IS NOT NULL
"
}
Process {
## Get Data
$rValue = Invoke-Sqlcmd2 -Query $Query_GetDatabases -ServerInstance $ServerAddress
## Return values
if ($Name) {
Return $rValue.Name
}
else {
Return $rValue
}
}
End {
## Purge Variables
Remove-Variable Query_GetDatabases, rValue
}
}
Это работает нормально, но я хочу, чтобы была возможность передавать как $ serverAddress, так ипеременные $ rValue через конвейер.Это так, что я могу запускать другие команды, например, так:
Get-TRISDatabases -name -ServerAddress "server1" | Remove-TRISDeadLinks
Вместо того, что у меня есть в данный момент, которое будет:
Get-TRISDatabases -name -ServerAddress "server1" | Remove-TRISDeadLinks -ServerAddress "server1"
Я попытался поместить адрес сервера в rValueобъект, но я должен был бы изменить любой другой сценарий на пользовательский адрес сервера rValue.ServerAddress, чтобы это работало.
Remove-TRISDeadLinks Блок параметров:
param (
[parameter(
Mandatory=$false, Position=1,ValueFromPipeline=$false
)]
$ServerAddress = "localhost",
[parameter(
Mandatory=$false, Position=2,ValueFromPipeline=$true
)]
$Databases
)
-
.EXAMPLE
Remove-TRISBrokenLinks -ServerAddress "localhost" -Databases "Database1"
Manually entering the server address and database
.EXAMPLE
Remove-TRISBrokenLinks -ServerAddress "localhost" -Databases "Database1", "Database2"
Runs against an array of databases names
.EXAMPLE
Get-TRISDatabases -ServerAddress "Localhost" -name | Remove-TRISBrokenLinks
Uses the Get-TRISDatabases function to pass all TRIS databases to the function