我正在尝试使用 Powershell 7-Preview 执行 Powershell 脚本(7.0)文件,该文件遍历所有数据库并在所有数据库中执行 SQL Server 脚本。
该脚本正确获取所有数据库,但是,当 Parallel 块执行时,我收到此错误(有关详细信息,请参阅下面的屏幕截图)。
无法验证参数“用户名”的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。
命令 - C:\GitHub\TempApp\CompanyTemplate\bin\debug\DeploymentScripts\PowerShell\DeployCompanyDatabases.ps1
Param
(
[string]$SystemWorkingDir,
[string]$DatabaseUsername,
[string]$DatabasePassword,
[string]$DacpacLocation,
[string]$OngoingChangesScriptLocation,
[string]$PreDeploymentBugFixScriptLocation,
[string]$DropExternalTablesScriptLocation
)
$SystemWorkingDir = "C:\GitHub\TempAPP\CompanyTemplate\bin\Debug"
$DatabaseUsername = "tempDB"
$DatabasePassword = "tempPassword"
$DacpacLocation = "CompanyTemplate.dacpac"
$OngoingChangesScriptLocation = "DeploymentScripts\OnGoingDataChanges.sql"
$PreDeploymentBugFixScriptLocation = "DeploymentScripts\PreDeployment.sql"
$DropExternalTablesScriptLocation = "DeploymentScripts\DropExternalTables.sql"
[string]$ServerInstance = "tempDB"
$GetDatabasesParams = @{
"Database" = "master"
"ServerInstance" = "tempDB"
"Username" = "$DatabaseUsername"
"Password" = "$DatabasePassword"
"Query" = "select [name] from sys.databases where [name] like 'Company%'"
"ConnectionTimeout" = 9999
}
echo "Retrieving company database names"
[string[]]$DatabaseNames = Invoke-Sqlcmd @GetDatabasesParams | select -expand name
[int]$ErrorCount = 0
$DatabaseNames | ForEach-Object -Parallel {
try
{
$OngoingChangesScriptParams = @{
"Database" = "$_"
"ServerInstance" = "$ServerInstance"
"Username" = "$DatabaseUsername"
"Password" = "$DatabasePassword"
"InputFile" ="$SystemWorkingDir\$OngoingChangesScriptLocation"
"OutputSqlErrors" = 1
"QueryTimeout" = 9999
"ConnectionTimeout" = 9999
}
Invoke-Sqlcmd @OngoingChangesScriptParams
}
catch
{
$ErrorCount++
echo "Internal Error. The remaining databases will still be processed."
echo $_.Exception|Format-List -force
}
}