将连接变量从xml传递给powershell

时间:2013-06-17 23:12:40

标签: sql powershell

我正在尝试创建一个SQL powershell脚本来检查多个SQL服务器上的某些条件。我想要连接的服务器列表存储在XML文件中。想法是powershell将解析XML文件并一次登录到每个服务器。我无法解决这个问题。我是powershell的新手,所以也许这是我不做的事情吗?

这是缩写的XML,仅列出3台服务器:

<Objs Version="1.1.0.1">   <Obj RefId="0">
    <TN RefId="0">
      <T>System.Data.DataRow</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Data.DataRow</ToString>
    <Props>
      <S N="InstanceName">SERVER1\INSTANCE1</S>
      <S N="DatabaseName">master</S>
    </Props>   </Obj>   <Obj RefId="1">
    <TNRef RefId="0" />
    <ToString>System.Data.DataRow</ToString>
    <Props>
      <S N="InstanceName">SERVER1\INSTANCE2</S>
      <S N="DatabaseName">master</S>
    </Props>   </Obj>   <Obj RefId="2">
    <TNRef RefId="0" />
    <ToString>System.Data.DataRow</ToString>
    <Props>
      <S N="InstanceName">SERVER2\INSTANCE1</S>
      <S N="DatabaseName">master</S>
    </Props>   </Obj> </Objs>

以下是我遇到问题的代码部分:

$filepath="\\Server\Test\SQLServerInfo.xml" [xml]$xml = Get-Content $filepath

$group = $xml.Objs.Obj.Props

# Parse the XML file  
     foreach ($i in $group) {

             $CurrentServer = $i.S.Item(0)
             $CurrentDB = $i.S.Item(1)

             $CurrentServer   # Show value of variable
             $CurrentDB       # Show value of variable

        # Connect to the SQL Server
            $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
            $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
            $SqlConnection.ConnectionString = "Server=$CurrentServer;Database=$CurrentDB;Integrated Security=SSPI"
            $SqlConnection.ConnectionString
            $SqlConnection.Open()

脚本无法说服务器未找到或无法访问。

有趣的是,当我将变量打印到屏幕上时($ CurrentServer和$ CurrentDB),值是正确的。但是,如果我将这两行更改为:

写主机“$ CurrentServer”
写主机“$ CurrentDB”

我得到以下输出:

System.Xml.XmlElement
System.Xml.XmlElement

此外,当我告诉脚本在分配变量后显示$ SqlConnection.ConnectionString时,它再次显示System.Xml.XmlElement而不是实际变量。所以,我不知道如何通过XML分配这些变量。

我的问题是如何将变量放入连接字符串。

提前致谢。

1 个答案:

答案 0 :(得分:0)

将此用作连接字符串:

$SqlConnection.ConnectionString = "Server=$($CurrentServer.'#text');Database=$($CurrentDB.'#text');Integrated Security=SSPI"