2

複数の SQL サーバーで特定の条件をチェックする SQL powershell スクリプトを作成しようとしています。接続したいサーバーのリストは XML ファイルに保存されています。これは、powershell が XML ファイルを解析し、各サーバーに一度に 1 つずつログインするという考え方です。これを機能させるのに問題があります。私はpowershellを初めて使用するので、おそらく私がやっていない簡単なことでしょうか?

以下は、3 つのサーバーのみをリストする省略された XML です。

<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) を画面に出力すると、値は正しいです。ただし、これらの2行を次のように変更すると:

書き込みホスト "$CurrentServer"
書き込みホスト "$CurrentDB"

次の出力が得られます。

System.Xml.XmlElement
System.Xml.XmlElement

さらに、変数を割り当てた後に $SqlConnection.ConnectionString を表示するようにスクリプトに指示すると、実際の変数ではなく System.Xml.XmlElement が再び表示されます。そのため、これらの変数が XML 経由でどのように割り当てられているかについてはわかりません。

私の質問は、変数を接続文字列に入れる方法です。

前もって感謝します。

4

1 に答える 1

0

これを接続文字列として使用します。

$SqlConnection.ConnectionString = "Server=$($CurrentServer.'#text');Database=$($CurrentDB.'#text');Integrated Security=SSPI"
于 2013-06-18T07:00:35.407 に答える