有客户问,如何从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"