有客户问,如何从HPC的报表数据库中查询某段时间某个计算节点上在运行什么作业,以下是我的答卷。

function Global:Query-JobHistory([parameter(Mandatory=$true)][string] $NodeName, [parameter(Mandatory=$true)][DateTime] $StartTime, [parameter(Mandatory=$true)][DateTime] $EndTime)

{
$connection = New-Object System.Data.SqlClient.SqlConnection("Data Source=.\computecluster;Initial Catalog=HpcReporting;Integrated Security=True;")
$connection.Open()
$cmd = $connection.CreateCommand()
$cmd.CommandText = "SELECT DISTINCT JobID FROM AllocationHistory INNER JOIN Node ON AllocationHistory.NodeId = Node.NodeId WHERE NodeName=@NodeName AND StartTime <= @EndTime AND EndTime >= @StartTime ORDER BY JobId"
$cmd.Parameters.AddWithValue("@NodeName", $NodeName.ToUpperInvariant()) | out-null;
$cmd.Parameters.AddWithValue("@StartTime", $StartTime) | out-null;
$cmd.Parameters.AddWithValue("@EndTime", $EndTime) | out-null;
$reader = $cmd.ExecuteReader();
while ($reader.Read()) { $reader.GetInt32(0); }
$reader.Close()
$connection.Close()
}
使用步骤为:
1)保存以上脚本到本地磁盘,比如存为c:\scripts\Query-JobHistory.ps1
2)以管理员身份运行PowerShell,执行以下命令
	Set-ExecutionPolicy RemoteSigned
	c:\scripts\Query-JobHistory.ps1
	Query-JobHistory -NodeName:PAERSCBBLA0863 -StartTime:"02/17/2011 16:45:00" -EndTime:"02/17/2011 16:46:00"