带有Action <t>参数的Powershell方法

时间:2017-04-16 10:13:33

标签: c# powershell

如何在Powershell中执行将Action<T>作为参数的方法?

upgradeEngine.Configure(c => c.ScriptExecutor.ExecutionTimeoutSeconds = 15 * 60);

C#代码:

var upgradeEngine = DeployChanges.To
    .SqlDatabase(connectionString)
    .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
    .LogToConsole();

//this line
upgradeEngine.Configure(c => c.ScriptExecutor.ExecutionTimeoutSeconds = 15 * 60);

//this line
upgradeEngine.Build();
Add-Type -Path (Join-Path -Path $currentPath -ChildPath 'x:\location\of\DbUp.dll')

$dbUp = [DbUp.DeployChanges]::To
$dbUp = [SqlServerExtensions]::SqlDatabase($dbUp, $connectionString)
$dbUp = [StandardExtensions]::WithScriptsFromFileSystem($dbUp, $scriptPath)
$dbUp = [StandardExtensions]::LogToConsole($dbUp)
$upgradeResult = $dbUp.Build().PerformUpgrade()

1 个答案:

答案 0 :(得分:1)

使用适当的签名构造一个ScriptBlock并将其转换为[Action[T]]

$delegate = [System.Action[DbUp.Builder.UpgradeConfiguration]]{
  param([DbUp.Builder.UpgradeConfiguration]$c)
  $c.ScriptExecutor.ExecutionTimeoutSeconds = 15 * 60
}
$DbUp.Configure($delegate)