複数の 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 経由でどのように割り当てられているかについてはわかりません。
私の質問は、変数を接続文字列に入れる方法です。
前もって感謝します。