2016-09-30 4 views
0

私は多くの他の関数の1つを呼び出す関数mirroringを書いています。書き換え関数 'A'を保存するには、関数 'A'のパラメータとして呼び出す関数を渡したいと思います。たとえば:PowerShellを使用して関数の変数データを別の関数に渡すにはどうすればよいですか?

function mirroring (
    [string] $svr="xxxx", 
    [string] $inst="MSSQLSERVER2", 
    [string] $datastore, 
    [string] $datastore1, 
    [string] $datastore2, 
    [string] $datastore3, 
    [string] $datastore4, 
    [string] $datastore5, 
    [string] $datastore6, 
    [string] $datastore7, 
    [string] $datastore8, 
    [string] $datastore9, 
    [string] $ServerStatus1 
) 
{ 
    Set-StrictMode -Version 2 
    [Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") 
    [Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") 
    [Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") 

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection "Server=$svr\$inst;Database=master;Integrated Security=True;" 
    $SqlConnection.Open() 
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
    $SqlCmd.CommandText = " SELECT db_name(sd.[database_id])AS [Database Name] 
      ,sd.mirroring_state     AS [Mirror State Number] 
      ,sd.mirroring_state_desc    AS [Mirror State] 
      ,sd.mirroring_partner_name   AS [Partner Name] 
      ,sd.mirroring_role_desc    AS [Mirror Role] 
      ,sd.mirroring_safety_level_desc  AS [Safety Level] 
      ,sd.mirroring_witness_name   AS [Witness] 
      ,sd.mirroring_connection_timeout AS [Timeout(sec)] 
     FROM sys.database_mirroring AS sd 
     WHERE mirroring_guid IS NOT null 
     ORDER BY [Database Name];" 
    $SqlCmd.Connection = $SqlConnection 
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
    $SqlAdapter.SelectCommand = $SqlCmd 
    $DataSet = New-Object System.Data.DataSet 
    $SqlAdapter.Fill($DataSet) 
    $DataSet.Tables[0] 
    $datastore = $DataSet.Tables[0].Rows[0][0] 
    $datastore1 = $DataSet.Tables[0].Rows[0][1] 
    $datastore2 = $DataSet.Tables[0].Rows[0][2] 
    $datastore3 = $DataSet.Tables[0].Rows[0][3] 
    $datastore4 = $DataSet.Tables[0].Rows[0][4] 
    $datastore5 = $DataSet.Tables[0].Rows[0][5] 
    $datastore6 = $DataSet.Tables[0].Rows[0][6] 
    $datastore7 = $DataSet.Tables[0].Rows[0][7] 

    if ($datastore2 -eq "Disconnected") 
    { 
     DisconnectedREMEDIATION 
    } 
    elseif ($datastore2 -eq "SYNCHRONIZED") 
    { 
     #$ServerStatus="The Instance Is in Synchronized State" 
     #$RemActonToBeTaken=1 
     SYNCHRONIZEDREMEDIATION 
    } 

    $ServerStatus1 = "DataBase Name:"+ $datastore+",Mirror State Number"+$datastore1+",Mirror State"+$datastore2+",Partner Name"+$datastore3+",Mirror Role"+$datastore4+",Safety Level"+$datastore5+",Witness"+$datastore6+",Timeout(In Sec)"+$datastore7 
    InsertServerStatus $ServerStatus1 
    return $ServerStatus1 
    $SqlConnection.Close() 
} 

私の第二の機能は

function InsertServerStatus(
    $ServerName="LAPTOP6\MSSQLSERVER2", 
    $InstanceName, 
    $ServerStatus1, 
    $RemActonToBeTaken 
) 
{ 
    Write-Host $ServerStatus1 
} 

私の質問は、私は私の機能InsertServerStatusで私$ServerStatus1を使用する方法です。私は間違っているのですか?

+0

あなたが関数内で使用しているとまったく同じパラメータを渡す必要が呼び出し中。したがって、あなたの関数呼び出しは、$ ServerStatus1 = "DataBase Name:" + $ datastore + "、ミラー状態番号" + $ datastore1 + "、Mirror State" +で、 'InsertServerStatus $ ServerName $ InstanceName $ ServerStatus1 $ RemActonToBeTaken' – Atf

答えて

0

右の場合、すべてのパラメータで関数を呼び出す必要があります。 あなたはこのようなあなたの関数を呼び出す必要があります。

InsertServerStatus $ServerName $InstanceName $ServerStatus1 $RemActonToBeTaken 

何をやっていることはこれです:

InsertServerStatus $ServerStatus1 

だから、$のServerNameパラメータは変数ServerStatus1の値

+0

連結でなければなりません。 + $ datastore5 + "、Witness" + $ datastore6 + "、タイムアウト(秒)" + $ datastore2 + "、パートナーの名前" + $ datastore3 + "、ミラーの役割" + $ datastore4 " – Arjun

0

親愛なるすべての感謝なっています返信私はそのような答えを得た

変数に親関数を渡す

$script:ServerStatus1 = "" 
子関数に

function InsertServerStatus(
$ServerName="LAPTOP6\MSSQLSERVER2", 
$InstanceName, 
$RemActonToBeTaken 

) 
{ 
(Parent Function) mirroring 

$Script:ServerStatus= $ServerStatus1 
"You Code" 
} 
関連する問題