我正在尝试创建一个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分配这些变量。
我的问题是如何将变量放入连接字符串。
提前致谢。
答案 0 :(得分:0)
将此用作连接字符串:
$SqlConnection.ConnectionString = "Server=$($CurrentServer.'#text');Database=$($CurrentDB.'#text');Integrated Security=SSPI"