我在powershell中有下面的代码,其中我要传递的参数来自SQL CMS,但是我愿意从MSSQL表名传递此服务器名,有办法实现这一目标。
import-module sqlps -DisableNameChecking
function Test-SQLConnection{
param([parameter(mandatory=$true)][string[]] $Instances)
$return = @()
foreach($InstanceName in $Instances){
$row = New-Object –TypeName PSObject –Prop @{'InstanceName'=$InstanceName;'StartupTime'=$null;'currenttime'=$null}
$servernameRDPcheck= $InstanceName
try
{
$Isconnected= (New-Object System.Net.Sockets.TCPClient -ArgumentList $row.instancename,3389).Connected
$insertquery=" update dba.dbo.cms_validation set [IsServerRDPpingable]=1 where servername='$instancename' and convert(varchar(10),entrydt,111)=convert(varchar(10),getdate(),111)"
Invoke-SQLcmd -ServerInstance 'HostedServer' -query $insertquery -Database dba
}
catch
{
$insertquery=" update dba.dbo.cms_validation set [IsServerRDPpingable]=0 where servername='$instancename' and convert(varchar(10),entrydt,111)=convert(varchar(10),getdate(),111)"
Invoke-SQLcmd -ServerInstance 'HostedServer' -query $insertquery -Database dba
}
}
return $return
}
$servers=@((dir "SQLSERVER:\SQLRegistration\Central Management Server Group\pih-win-sptlsql\Test\").Name)
$servers+="HostedServer"
Test-SQLConnection -Instances $servers
因此,我不想像上面那样从CMS中传递值,而是愿意从SQL表名称中传递它,如下所示,并且应该在该表中的所有服务器名都被循环时
$servers= select servername from tablename
答案 0 :(得分:0)
下面是您可以在PS函数上方调用的方式,它对我有用
$Query = "set nocount on; select top 20 servername from dba.dbo.tablename"
$Servers = sqlcmd -b -S 'HostedServer' -d master -h -1 -Q $Query -W
$servers+="pih-win-sptlsql"
Test-SQLConnection -Instances $servers