簡體   English   中英

調用powershell函數,通過展開發送參數

[英]Calling a powershell function, sending parameters via splatting

我有一個Powershell函數,該函數從SqlPs模塊調用“ Restore-SqlDatabase”,並通過展開將參數發送給該函數。 我試圖弄清楚為什么它沒有按我期望的那樣工作。 這是我的代碼:

$SqlParams = @{"ServerInstance"="'$ServerName'";
    "Database"="'$DatabaseName'";
    "BackupFile"="'$BackupFile'";}

if($Credential -ne $null) {
    $SqlParams.Add("SqlCredential", $Credential)
}

if($ReplaceDatabase) {
    $SqlParams.Add("ReplaceDatabase", $null)
}

try { $PathResult = Test-Path -Path $RestorePath } catch { $PathResult = $False }

if($PathResult) {
    Write-Verbose "RestorePath exists, using: $RestorePath"

    $RelocateData = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
    $RelocateData.LogicalFileName = $DatabaseName
    $RelocateData.PhysicalFileName = $(Join-Path -Path $RestorePath -ChildPath "$DatabaseName.mdf")

    $RelocateLog = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
    $RelocateLog.LogicalFileName = "$DatabaseName`_log"
    $RelocateLog.PhysicalFileName = $(Join-Path -Path $RestorePath -ChildPath "$DatabaseName`_log.ldf")

    $RelocateFile = @($RelocateData,$RelocateLog)
    $SqlParams.Add("RelocateFile", $RelocateFile)
}

try{
    Write-Verbose "Using the following parameters:"
    $paramString = $SqlParams | Out-String
    Write-Verbose $paramString 
    Restore-SqlDatabase @SqlParams
} catch { 
    Write-Error $_ 
    Write-Output "Restore failed..."
    return
}
Write-Output "Database successfully restored!"

當我運行它時,它無法連接到數據庫。 但是,當我直接在終端中使用“參數”哈希表和相同的參數值運行命令時,它的工作原理與預期的完全一樣。

對我有什么提示嗎?

這是一些秘密調味料。

Restore-SqlDatabase調用之前進行了此Restore-SqlDatabase

SQLCMD -S $ServerName -d master -Q "Alter Database [$DatabaseName] SET SINGLE_USER With ROLLBACK IMMEDIATE"

並在Restore-SqlDatabase調用之后執行了此Restore-SqlDatabase

SQLCMD -S $ServerName -d master -Q "Alter Database [$DatabaseName] SET MULTI_USER WITH ROLLBACK IMMEDIATE"

現在似乎一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM