Powershell 从子脚本连接两个Azure Analysis Services时出错

Powershell 从子脚本连接两个Azure Analysis Services时出错,powershell,azure-analysis-services,Powershell,Azure Analysis Services,我正在编写PowerShell脚本。在这些脚本中,我有两个脚本,分别与两台Azure分析服务器连接。这些脚本由主脚本调用。我犯了错误 "Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an object." 我的脚本代码如下 Child1.ps1 param( [String]

我正在编写PowerShell脚本。在这些脚本中,我有两个脚本,分别与两台Azure分析服务器连接。这些脚本由主脚本调用。我犯了错误

"Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an object."
我的脚本代码如下

Child1.ps1

param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    $filePath = "C:\Users\user1\Desktop\DBList.txt"
)

$command = "C:\Users\User1\Desktop\test1.ps1 –envName1 
asazure://aspaaseastus2.asazure.windows.net/mydevaas -toBeDisconnect1 No"
$Obj1 = Invoke-Expression $command
Start-Sleep -Seconds 15

$command1 = "C:\Users\User1\Desktop\test2.ps1 –envName2 
asazure://aspaaseastus2.asazure.windows.net/myuataas -toBeDisconnect2 No"
$Obj2 = Invoke-Expression $command1
 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test1.ps1:13 char:5
 +     $server1.Connect($envName1)
 +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : NullReferenceException

 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test2.ps1:13 char:5
        +     $server2.Connect($envName2)
        +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : NullReferenceException
Child2.ps1

param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    $filePath = "C:\Users\user1\Desktop\DBList.txt"
)

$command = "C:\Users\User1\Desktop\test1.ps1 –envName1 
asazure://aspaaseastus2.asazure.windows.net/mydevaas -toBeDisconnect1 No"
$Obj1 = Invoke-Expression $command
Start-Sleep -Seconds 15

$command1 = "C:\Users\User1\Desktop\test2.ps1 –envName2 
asazure://aspaaseastus2.asazure.windows.net/myuataas -toBeDisconnect2 No"
$Obj2 = Invoke-Expression $command1
 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test1.ps1:13 char:5
 +     $server1.Connect($envName1)
 +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : NullReferenceException

 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test2.ps1:13 char:5
        +     $server2.Connect($envName2)
        +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : NullReferenceException
MainParent.ps1

param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    $filePath = "C:\Users\user1\Desktop\DBList.txt"
)

$command = "C:\Users\User1\Desktop\test1.ps1 –envName1 
asazure://aspaaseastus2.asazure.windows.net/mydevaas -toBeDisconnect1 No"
$Obj1 = Invoke-Expression $command
Start-Sleep -Seconds 15

$command1 = "C:\Users\User1\Desktop\test2.ps1 –envName2 
asazure://aspaaseastus2.asazure.windows.net/myuataas -toBeDisconnect2 No"
$Obj2 = Invoke-Expression $command1
 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test1.ps1:13 char:5
 +     $server1.Connect($envName1)
 +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : NullReferenceException

 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test2.ps1:13 char:5
        +     $server2.Connect($envName2)
        +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : NullReferenceException
错误在MainParent.ps1的下面

param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    [String]
    $envName1,
    [String]
    $toBeDisconnect1
)

$loadInfo1 = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server1 = New-Object Microsoft.AnalysisServices.Server

if($toBeDisconnect1 -eq "No")
{
    $server1.Connect($envName1)
    return $server1
}
elseif($toBeDisconnect1 -eq "Yes")
{
    $server1.Disconnect()
    Write-Host $server1 " has been disconnected."
}
param(
    $filePath = "C:\Users\user1\Desktop\DBList.txt"
)

$command = "C:\Users\User1\Desktop\test1.ps1 –envName1 
asazure://aspaaseastus2.asazure.windows.net/mydevaas -toBeDisconnect1 No"
$Obj1 = Invoke-Expression $command
Start-Sleep -Seconds 15

$command1 = "C:\Users\User1\Desktop\test2.ps1 –envName2 
asazure://aspaaseastus2.asazure.windows.net/myuataas -toBeDisconnect2 No"
$Obj2 = Invoke-Expression $command1
 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test1.ps1:13 char:5
 +     $server1.Connect($envName1)
 +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : NullReferenceException

 Exception calling "Connect" with "1" argument(s): "Object reference not set to an instance of an 
 object."
 At C:\Users\User1\Desktop\test2.ps1:13 char:5
        +     $server2.Connect($envName2)
        +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : NullReferenceException
我的AzureAnalysis Services dll版本是13.0.4495.10。我正在分享这个信息,可能是一个问题。
似乎
调用表达式
没有传递参数
envName1
。我更愿意像下面这样调用子脚本:

$Obj1 = &"C:\Users\User1\Desktop\test1.ps1" -envName1 "asazure://aspaaseastus2.asazure.windows.net/mydevaas" -toBeDisconnect1 No | select -Last 1

$Obj2 = &"C:\Users\User1\Desktop\test2.ps1" -envName2 "asazure://aspaaseastus2.asazure.windows.net/myuataas" -toBeDisconnect2 No | select -Last 1 
$command=“C:\Users\User1\Desktop\test1.ps1–envName1asazure://aspaaseastus2.asazure.windows.net/mydevaas -toBeDisconnect1编号“

仔细查看
envName1
之前的连字符。它实际上是-(连字符)而不是-(连字符)。这就是envName1未被传递的原因。第二个参数toBeDisconnect1正确无误


如何知道两者的区别(连字符)短于–(破折号):)

您将在何处以及如何存储子脚本返回的对象?我已经执行了您的建议。对于调用带有“1”参数的“Connect”的test2.ps1异常,我得到的错误如下:“对象引用未设置为对象的实例。”位于C:\Users\User1\Desktop\test2.ps1:13 char:5+$server2.Connect($envName2)+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:NotSpecified:(:)[],MethodInvocationException+FullyQualifiedErrorId:NullReferenceException对于我最后添加的返回对象|(管道),如果您注意到的话。还有,你能在envName1值周围加上“(引号)吗?更新了答案。谢谢@Krishg,我可以看到你更新了答案,这是有道理的,但是当我使用相同的方法时,我得到了以下错误。在第1行char:149+…westus.asazure.windows.net/mydevbiaas“-toBeDisconnect1“否”|$Obj1+~~~~~表达式仅允许作为管道的第一个元素。+CategoryInfo:ParserError:(:)[],ParentContainesErrorRecordException+FullyQualifiedErrorId:ExpressionsMustBeefirstinPipeLine在()中移除末端管道或包裹第一个零件时会发生什么情况。