我有一个脚本连接到服务器实例,并获取该服务器的SQL Agent Jobs。我正在尝试将SQL对象从一个函数传递到另一个函数,但是我继续遇到错误。在这种情况下,我正在运行一个集成测试,该测试通过PowerShell命令行将SQL对象传递到生产脚本中。
我尝试仅传递服务器名称,但是它似乎仍然不起作用。
集成脚本:
$inst = "Server01"
$svr = new-object ('Microsoft.SqlServer.Management.Smo.Server') $inst
Write-Host ($svr | Format-Table | Out-String)
#Call Start stop script to add in the starts and stops
powershell -command ". .\AddStart.ps1; Start-Step -svr $svr -jobName ""Test_AddStartStop_Integration"""
生产脚本:
function Start-Step($svr, $jobName)
{
$job = new-object ('Microsoft.SqlServer.Management.Smo.Agent.Job')
($svr.JobServer, $jobName)
Write-Host ($svr | Format-Table | Out-String)
}
每当在集成测试中输出$ svr对象时,我都会获得所有连接信息。在Start.ps1的Write-Host中,它只是给我回覆审核失败的内容。出现以下错误
powershell : new-object : Exception calling ".ctor" with "2" argument(s): "SetParent failed for Job
答案 0 :(得分:1)
您不能将对象传递到新的Powershell实例。而是“点包含”包含函数的脚本并直接调用它们。 EG:
. "$PSScriptRoot\Production.ps1"
$inst = "localhost"
$svr = new-object ('Microsoft.SqlServer.Management.Smo.Server') $inst
Write-Host ($svr | Format-Table | Out-String)
#Call Start stop script to add in the starts and stops
Start-Step -svr $svr -jobName "Test_AddStartStop_Integration"