有没有一种方法可以将MSSQL表列作为参数传递给Powershell函数?

时间:2020-03-12 13:20:52

标签: sql sql-server powershell command-prompt powershell-3.0

我在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

1 个答案:

答案 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