我需要创建一个具有相互依赖的动态参数的 PowerShell 函数($server, $database, $table)。
1. When the user picks $server, parameter $database needs to be auto-populated.
2. And, depending on what value selected for $database the $table parameter needs to be auto-populated.
我在这里有单个动态参数 ($server $database) 的代码。(这也是我发布的,有赏金)。这个论坛上的其他人在这里提出了类似的问题,但到目前为止没有人回答。
这是单个动态参数的代码:
import-module sqlps
function Get-Database {
<#
.SYNOPSIS
Dynamic validationset of databases
#>
#Requires -Version 3.0
[CmdletBinding()]
Param (
[Parameter(Mandatory)][string]$server
)
DynamicParam {
$newparams = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
$paramattributes = New-Object System.Management.Automation.ParameterAttribute
$paramattributes.ParameterSetName = "__AllParameterSets"
$paramattributes.Mandatory = $false
$systemdbs = @("master", "msdb", "model", "SSIS", "distribution")
$srv = New-Object 'Microsoft.SqlServer.Management.SMO.Server' "$server"
$dblist = ($srv.Databases).name | Where-Object { $systemdbs -notcontains $_ }
$argumentlist = @()
foreach ($db in $dblist) {
$argumentlist += [Regex]::Escape($db)
}
$validationset = New-Object System.Management.Automation.ValidateSetAttribute -ArgumentList $argumentlist
$combinedattributes = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute]
$combinedattributes.Add($paramattributes)
$combinedattributes.Add($validationset)
$Databases = New-Object -Type System.Management.Automation.RuntimeDefinedParameter("Databases", [String[]], $combinedattributes)
$newparams.Add("Databases", $Databases)
return $newparams
}
process {
$UserDb = $psboundparameters.Databases
Write-Host "You picked: $UserDb"
}
}
Clear-Host
Get-Database -server 'YourServerName' -Databases 'DynamicallyPopulatedDatabases'