2016-12-01 2 views
0

Я ищу получение информации с нескольких серверов, например, clustername, nodename и state.Get-ClusterGroup и foreach с использованием импортированной таблицы SQL

я могу получить правильный выводе, когда я жёстко имена в foreach петли, как это:

$clusters = "Cluster1", "Cluster2" 
foreach ($cluster in $clusters) { 
    Get-ClusterGroup -Cluster $cluster 
} 

, но когда я запускаю эту версию, которая вытягивает информацию из таблицы SQL его придумывают ниже ошибки ,

$clusters = $SQLServer = "DatawarehouseServer" #use Server\Instance for named SQL instances! 
$SQLDBName = "Datawarehouse" 
$SqlQuery = "SELECT clusters FROM dbo.clusters" 

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=$SQLServer;Database=$SQLDBName;Integrated Security=True" 

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.Connection = $SqlConnection 

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 

$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 

$SqlConnection.Close() 

clear 

$DataSet.Tables[0] 

foreach ($cluster in $clusters) { 
    Get-ClusterGroup -Cluster $cluster 
} 
WARNING: If you are running Windows PowerShell remotely, note that some failover 
clustering cmdlets do not work remotely. When possible, run the cmdlet locally 
and specify a remote computer as the target. To run the cmdlet remotely, try 
using the Credential Security Service Provider (CredSSP). All additional errors 
or warnings from this cmdlet might be caused by running it remotely. 
Get-ClusterGroup : The cluster service is not running. Make sure that the 
service is running on all nodes in the cluster. There are no more endpoints 
available from the endpoint mapper 
At line:26 char:2 
+ {Get-ClusterGroup -Cluster $cluster} 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ConnectionError: (:) [Get-ClusterGroup], ClusterCmdletException 
    + FullyQualifiedErrorId : ClusterEndpointNotRegistered,Microsoft.FailoverClusters.PowerShell.GetClusterGroupCommand.

Я теперь пытаюсь это я, кажется, шаг ближе или шаг назад depedant о том, как вы смотрите на него. Он тянет правильную информацию прямо сейчас, но только для одного кластера:

Благодаря комментариям я удалось получить еще один шаг вперед или шаг назад с этим:

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=Datawarehouseserver;Database=Datawarehouse;Integrated Security=True" 
$SqlConnection.Open() 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = "SELECT clusters FROM dbo.clusters" 
$SqlCmd.Connection = $SqlConnection 
$clustername = $SqlCmd.ExecuteScalar() 
$SqlConnection.Close() 
#Write-Output "Cluster is " $dbname 
clear 
foreach ($cluster in $clustername) { 
    Get-ClusterGroup -Cluster $cluster 
} 
+0

'$ clusters' только одна строка с содержанием«DatawarehouseServer», так что цикл пытается подключиться к кластеру с этим именем, а затем терпит неудачу. Похоже, вам нужно пройти через '$ DataSet', но я не работаю с данными SQL достаточно часто, чтобы быть уверенным без тестирования, и у меня нет подходящего env передо мной. –

+0

Спасибо, мне удалось сделать шаг дальше или шаг назад. это не позволит мне добавить к этому комментарию бит. Я попытаюсь отредактировать главный пост. – GrumGrum

+0

'foreach ($ cluster in $ DataSet.Tables [0] .clusters)' –

ответ

0

Вам нужно перебрать кластера имена, возвращаемые вашим SQL-запросом, но вашей переменной $cluster никогда не присваивается этот список имен. Используйте вместо этого:

foreach ($cluster in $DataSet.Tables[0].clusters) { 
    ... 
}