【问题标题】:Powershell method with Action<T> parameter [duplicate]带有 Action<T> 参数的 Powershell 方法
【发布时间】:2017-04-16 10:13:33
【问题描述】:

如何在Powershell中执行以Action&lt;T&gt;为参数的方法?

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()

【问题讨论】:

  • GSerg,这个方法没有使用参数
  • 我不确定你的意思是什么,但委托接受一个参数$i 并使用它。

标签: c# powershell


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多