SQL查询结果到PowerShell对象

时间:2018-01-18 07:54:31

标签: mysql sql powershell

我正在寻找一种映射查询结果的方法,这是我从我的orchestrator Runbook收到的。我需要将此查询结果映射到PowerShell对象以使用它。

查询结果如下所示:

9;Taskname;username;09.06.2017 00:00:00;10;3,24;Taskname2;username2;21.07.2017 00:00:00;0;7,25;taskname3;username;31.08.2017 00:00:00;0;7,

查询显示如下:

ID;Taskname;username;datetime;progress;projectid,  

我从orchestrator的查询得到了这个结果:

SELECT [id]
  ,[name]
  ,[ressponsible]
  ,[targetdate]
  ,[progress]
  ,[projectid]
FROM table WHERE progress < 100 and targetdate < CAST(GETDATE() as DATE);

结果是如上所示的字符串。

我目前正在使用此PowerShell代码:

#declare variable

$a = "\`d.T.~Ed/{F60295A1-775D-4D61-9A73-5A180446F4EF}.QueryResultString\`d.T.~Ed/";

$a | out-file c:\users\admwid\desktop\test.txt

在Microsoft Orchestrator中,它看起来像这样:

enter image description here

这只是一个想法。我很欣赏每一个输入,比如如果我在PowerShell中进行查询会更有意义。

将此输出映射到PowerShell对象后,我必须按用户名对其进行排序,以便我可以使用结果。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。现在我在PowerShell中编写了整个脚本,并将添加一个Mail函数来将信息分发给所有负责人。我有几个属于不同用户的任务。我检查任务属于哪个用户(每个用户可以超过1个任务)并发送一个邮件列出每个任务。

到目前为止,脚本看起来像这样(没有邮件功能)

<#define SQL credentials#>
$dataSource = “SERVERNAME”
$user = “USERNAME”
$pwd = “PASSWORD”
$database = “”
$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”

<#connect with SQL Server#>
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString

$connection.Open()

<#define and execute query#>
$query = “SELECT [id]
      ,[name]
      ,[responsible]
      ,[targetdate]
      ,[progress]
      ,[projectid]
  FROM TABLENAME WHERE progress < 100 and targetdate < CAST(GETDATE() as DATE);”

$command = $connection.CreateCommand()
$command.CommandText = $query

$result = $command.ExecuteReader()

<#map result to table#>
$table = new-object “System.Data.DataTable”
$table.Load($result)

$format = @{Expression={$_.Id};Label=”Id”;width=10},
            @{Expression={$_.name};Label=”Name”; width=30},
            @{Expression={$_.responsible};Label=”Username”; width=30},
            @{Expression={$_.targetdate};Label=”datetime”; width=30},
            @{Expression={$_.progress};Label=”progress”; width=30},
            @{Expression={$_.projectid};Label=”projectid”; width=30}

$table | Format-Table $format | Out-File C:\Users\username\Desktop\table.txt

<#close connection#>
$connection.Close()

<#define variable expired tasks#>
$expiredTasks = $table;

<#get unique username#>
$uniqueUsernames = $expiredTasks | Sort-Object -Property responsible -Unique | select responsible

<#foreach username get all expired tasks#>
foreach($uniqueUsername in $uniqueUsernames)
{
    <#select task where username foreach username#>
    $selectTasks = $table | Where-Object -Property responsible -Like $uniqueUsername.responsible

    sendMail $selectTasks
}

如果有人知道这种情况的更好解决方案,我就是开放式的