我正在寻找一种映射查询结果的方法,这是我从我的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中,它看起来像这样:
这只是一个想法。我很欣赏每一个输入,比如如果我在PowerShell中进行查询会更有意义。
将此输出映射到PowerShell对象后,我必须按用户名对其进行排序,以便我可以使用结果。
答案 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
}
如果有人知道这种情况的更好解决方案,我就是开放式的