2017-03-17 102 views
0
cls 

#function to Execute a stored procedure 
function ExecSproc 
{ 
    param ($Conn, $Sproc, [email protected]{}) 

    $MethodName = "ExecSproc" 
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
    $SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure 
    $SqlCmd.Connection = $Conn 
    $SqlCmd.CommandText = $Sproc 
    foreach($p in $Parameters.Keys){ 
     [Void] $SqlCmd.Parameters.AddWithValue("@$p",$Parameters[$p]) 
    } 
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($SqlCmd) 
    $DataSet = New-Object System.Data.DataSet 
    [Void] $SqlAdapter.Fill($DataSet) 
    $SqlConnection.Close() 
    return $DataSet.Tables[0] 
} 

function ExecuteSqlQuery ($SQLQuery, $ConnectionString) 
{ 
    $Datatable = New-Object System.Data.DataTable 

    $MethodName = "ExecuteSqlQuery" 
    $Connection = New-Object System.Data.SQLClient.SQLConnection 
    $Connection.ConnectionString = $ConnectionString 
    $Connection.Open() 
    $Command = New-Object System.Data.SQLClient.SQLCommand 
    $Command.Connection = $Connection 
    $Command.CommandText = $SQLQuery 
    $Reader = $Command.ExecuteReader() 
    $Datatable.Load($Reader) 
    $Connection.Close() 

    return $Datatable 
}   

function SFSCheck() 
{ 
    $OptionalField1 = "" 
    $OptionalField2 = "" 
    $SecondaryEmail = "" 
    $EvaluationGroupCode = "" 
    $DefaultRubricId = "" 
    $DefaultWalktoolId = "" 
    $EvaluatedInSFS = $true 
    $EmploymentStatus = "" 
    $Cert = "" 
    $PrimaryEvalutor_payrollID = "" 
    $SecondaryEvaluator_payrollID = "" 
    $Access = "" 
    $GoogleEmail = "" 

    $PrimaryEvalutor_payrollID = $ManagerEmployeeNumber 
    $OptionalField1 = ($EffectiveDate -as [string]).Split(" ")[0] 

    $SFS = ExecSproc -Conn $AcctProConnectionString -Sproc SchoologySFSeSchoolGet -Parameters @{JobClassCode=$JobClassCode;Location=$CheckLocation} 
    if ([string]::IsNullOrEmpty($SFS)) 
    { 
     Write-Host "No Standards for Success account needed for combination of Job Class Code and location." 
    } 
    else 
    { 
     if ($SFS[7] -eq "Y") 
     { 
      if ($SFS[9] -ne "N") 
      { 
       $Access = $SFS[9] 
       $Cert = $true 

       #Check the Action Code to determine the status field 
       if ($ActionCode -eq "LEAV") 
       { 
        $EmploymentStatus = "Inactive" 
       } 
       elseif ($ActionCode -eq "TERM") 
       { 
        $EmploymentStatus = "Remove" 
       } 
       elseif($ActionCode -eq "HIRE") 
       { 
        $EmploymentStatus = "Add" 
       } 
       else 
       { 
        $EmploymentStatus = "" 
       } 

       if(-not([string]::IsNullOrEmpty($StateId))) 
       { 
        $StateId = $StateId.Substring(4).Trim() 
       } 

       #$personAsJson = "{SIEN=`"$StateId`";Payroll_id=`"$EmployeeNumber`";Email=`"$EmployeeEmail`";FirstName=`"$FirstName`";LastName=`"$LastName`";Position=`"$LongDescription`";Optional_Field1=`"$OptionalField1`";Optional_Field2=`"$OptionalField2`";Location_id=`"$CheckLocation`";Primary_Evalutor_id=`"$PrimaryEvalutor_payrollID`";Secondary_Evaluator_ids=`"$SecondaryEvaluator_payrollID`";EvalGroup_id=`"$EvaluationGroupCode`";Rubric_id=`"$DefaultRubricId`";Walk_id=`"$DefaultWalktoolId`";isEvaluated=`"$EvaluatedInSFS`";Employment_Status=`"$EmploymentStatus`";isCertified=`"$Cert`";Access=`"$Access`";Google_Email=`"$GoogleEmail`"}" 
       $User = New-Object Users 
       $User.SIEN = $StateId 
       $User.Payroll_id = $EmployeeNumber 
       $User.Email = $EmployeeEmail 
       $User.FirstName = $FirstName 
       $User.LastName = $LastName 
       $User.Position = $LongDescription 
       $User.Optional_Field1 = $OptionalField1 
       $User.Optional_Field2 = $OptionalField2 
       $User.Location_id = $CheckLocation 
       $User.Primary_Evaluator_id = $PrimaryEvalutor_payrollID 
       $User.Secondary_Evaluator_ids = $SecondaryEvaluator_payrollID 
       $User.EvalGroup_id = $EvaluationGroupCode 
       $User.Rubric_id = $DefaultRubricId 
       $User.Walk_id = $DefaultWalktoolId 
       $User.is_Evaluated = $EvaluatedInSFS 
       $User.Employment_Status = $EmploymentStatus 
       $User.isCertified = $Cert 
       $User.Access = $Access 
       $User.Google_Email = $GoogleEmail 

       $json.Add($User) 
       #$response = Invoke-RestMethod 'http://example.com/api/SFS' -Method Put -Body $json 

       #Write-Host "Adding $FirstName $LastName to Standards for Success file" -ForegroundColor Green 
      } 
     } 
     else 
     { 
      Write-Host "Account does not need Standards for Success." -ForegroundColor Red 
     }  
    } 
} 

$source = @" 
public class Users 
{ 
    public string SIEN; 
    public string Payroll_id; 
    public string Email; 
    public string FirstName; 
    public string LastName; 
    public string Position; 
    public string Optional_Field1; 
    public string Optional_Field2; 
    public string Location_id; 
    public string Primary_Evaluator_id; 
    public string Secondary_Evaluator_ids; 
    public string EvalGroup_id; 
    public string Rubric_id; 
    public string Walk_id; 
    public bool is_Evaluated; 
    public string Employment_Status; 
    public bool isCertified; 
    public string Access; 
    public string Google_Email; 
} 
"@ 

Add-Type -TypeDefinition $source 

$AcctProConnectionString = "Server='167.217.10.172';Database='AccountProvision';trusted_connection=true;" 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = $AcctProConnectionString 

$Query = "SELECT TOP 3 * FROM FacultyAduit WHERE CaptureDateTime = '2017-03-16 10:00:00.000' ORDER BY CaptureDateTime DESC" 
$AuditData = New-Object System.Data.DataTable 
$AuditData = ExecuteSqlQuery -SQLQuery $Query -ConnectionString $AcctProConnectionString 
$json = New-Object System.Collections.Generic.List[System.Object] 

foreach($row in $AuditData) 
{ 
    $EmployeeNumber = "" 
    $FirstName = "" 
    $LastName = "" 
    $EffectiveDate = "" 
    $JobClassCode = "" 
    $LongDescription = "" 
    $StateId = "" 
    $CheckLocation = "" 
    $ManagerEmployeeNumber = "" 
    $ActionCode = "" 
    $EmployeeEmail = "" 

    $EmployeeNumber = $Row[2] 
    $FirstName = $row[3].ToLower() 
    $LastName = $Row[4].Replace(" ", "").Replace("-","").Replace("'","").ToLower() 
    $EffectiveDate = $row[7] 
    $JobClassCode = $row[16] 
    $LongDescription = $Row[18].ToLower() 
    $StateId = $Row[28] 
    $CheckLocation = $Row[29] 
    $ManagerEmployeeNumber = $row[33] 
    $ActionCode = $Row[36] 
    $EmployeeEmail = $Row[37].ToLower() 

    SFSCheck 
    Write-Host "" 
} 

$json | ConvertTo-Json 

我有一个生成JSON用户脚本对象,比如这个:如何在PowerShell中的多个JSON对象添加到一个JSON对象

{ 
"SIEN" : "", 
"Payroll_id" : "", 
"Email" : "[email protected]", 
"FirstName" : "102_TEACHER", 
"LastName" : "SANDBOX", 
"Position" : "", 
"Optional_Field1" : "", 
"Optional_Field2" : "", 
"Location_id" : "B102", 
"EvalGroup_id" : "2182", 
"Rubric_id" : "2344", 
"Walk_id" : "", 
"Employment_Status" : "active", 
"isCertified" : true, 
"Google_Email" : "" 
} 

但是我想生成一个JSON对象包括所有

{ 
"Users": 
[ 
    { 
     "SIEN": "", 
     "Payroll_id": "1203", 
     "Email": "[email protected]", 
     "FirstName": "shannon", 
     "LastName": "hild", 
     "Position": "media assistant", 
     "Optional_Field1": "01/09/1989", 
     "Optional_Field2": "", 
     "Location_id": "B094", 
     "Primary_Evalutor_id": "12269", 
     "Secondary_Evaluator_ids": "", 
     "EvalGroup_id": "", 
     "Rubric_id": "", 
     "Walk_id": "", 
     "isEvaluated": "True", 
     "Employment_Status": "Inactive", 
     "isCertified": "True", 
     "Access": "Staff - Certified", 
     "Google_Email": "" 
    }, 
    { 
     "SIEN": "10804749", 
     "Payroll_id": "8895", 
     "Email": "[email protected]", 
     "FirstName": "cynthia", 
     "LastName": "chizer", 
     "Position": "special education tchr", 
     "Optional_Field1": "08/25/1999", 
     "Optional_Field2": "", 
     "Location_id": "B105", 
     "Primary_Evalutor_id": "558", 
     "Secondary_Evaluator_ids": "", 
     "EvalGroup_id": "", 
     "Rubric_id": "", 
     "Walk_id": "", 
     "isEvaluated": "True", 
     "Employment_Status": "Inactive", 
     "isCertified": "True", 
     "Access": "Staff - Certified", 
     "Google_Email": "" 
    } 
] 
} 

我送这一个JSON对象的API,但我不确定如何将用户添加到一个对象:我正在生成看起来像这样的用户对象。我已经尝试创建一个字符串并将所有内容添加到一个字符串并将该字符串转换为一个json对象,但是这也不起作用。任何帮助深表感谢。

+1

由于JSON是在PowerShell中已知的格式,你可以只创建一个数组和你的对象添加到它。使用'ConvertFrom-Json'获取你的对象并使用'ConvertTo-Json'来导出数组。 – restless1987

+0

如果您的代码包含敏感数据,您仍然可以发布它:只需对敏感数据进行模糊处理即可。 – bluuf

+0

我已经更新了描述以包含我的代码,以便您可以看到我正在尝试执行的操作 – johnnyjohnson

回答

0

您可以通过创建一个数组列表,通过使用ConvertFrom-Json从JSON用户转换为PSCustomObject做,将用户添加到列表中,并通过使用ConvertTo-Json转换列表回JSON。

$users = [System.Collections.ArrayList]::new(); 

$userAsJson = ' 
{ 
    "SIEN" : "", 
    "Payroll_id" : "", 
    "Email" : "[email protected]", 
    "FirstName" : "102_TEACHER", 
    "LastName" : "SANDBOX", 
    "Position" : "", 
    "Optional_Field1" : "", 
    "Optional_Field2" : "", 
    "Location_id" : "B102", 
    "EvalGroup_id" : "2182", 
    "Rubric_id" : "2344", 
    "Walk_id" : "", 
    "Employment_Status" : "active", 
    "isCertified" : true, 
    "Google_Email" : "" 
}'; 
$user = $userAsJson | ConvertFrom-Json; 
$null = $users.Add($user); 
$null = $users.Add($user); 

$result = @{ Users = $users}; 

$result | ConvertTo-Json; 

这将产生以下输出

{ 
    "Users": [ 
        { 
         "SIEN": "", 
         "Payroll_id": "", 
         "Email": "[email protected]", 
         "FirstName": "102_TEACHER", 
         "LastName": "SANDBOX", 
         "Position": "", 
         "Optional_Field1": "", 
         "Optional_Field2": "", 
         "Location_id": "B102", 
         "EvalGroup_id": "2182", 
         "Rubric_id": "2344", 
         "Walk_id": "", 
         "Employment_Status": "active", 
         "isCertified": true, 
         "Google_Email": "" 
        }, 
        { 
         "SIEN": "", 
         "Payroll_id": "", 
         "Email": "[email protected]", 
         "FirstName": "102_TEACHER", 
         "LastName": "SANDBOX", 
         "Position": "", 
         "Optional_Field1": "", 
         "Optional_Field2": "", 
         "Location_id": "B102", 
         "EvalGroup_id": "2182", 
         "Rubric_id": "2344", 
         "Walk_id": "", 
         "Employment_Status": "active", 
         "isCertified": true, 
         "Google_Email": "" 
        } 
       ] 
} 
+0

我试过从json转换为json,但是当我尝试这种方式时,json会将所有与imporper格式相混淆。 – johnnyjohnson

+0

@johnnyjohnson我意识到,你期望一个名为'Users'的JSON对象包含用户列表。我编辑了我的答案,以便ouptut匹配您所需的结果。可以给你? – rufer7

相关问题