Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Your domain user name (without domain name).")]
[string]$username,
[Parameter(Mandatory=$true, Position=1, HelpMessage="Your domain account password.")]
[SecureString]$password
)
function UnixTimeStampToDateTime([long]$unixTimeStamp)
{
$UnixEpoch = New-Object DateTime @(1970, 1, 1, 0, 0, 0, 0, "Utc")
return $UnixEpoch.AddMilliseconds($unixTimeStamp).ToLocalTime()
}
$me = $username
$pass = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
Invoke-RestMethod `
-Uri "http://youtrack.crossmarket.across.lan/rest/user/login" `
-Body @{login="acrosssys\$me"; password=$pass} `
-Method Post `
-SessionVariable sess `
-ErrorAction Stop | Out-Null
if(-not $?) {
throw "Could not login."
}
$ticketsResponse = Invoke-RestMethod `
-Uri "http://youtrack.crossmarket.across.lan/rest/issue?filter=for+%23me+updated%3A+Today" `
-Method Get `
-WebSession $sess
$ids = $tickets.issueCompacts.issue.id
$allWorkItems = $ids `
| % { Invoke-RestMethod -Uri "http://youtrack.crossmarket.across.lan/rest/issue/$_/timetracking/workitem" -Method Get -WebSession $sess } `
| %{$_.workitems.workitem}
$myWorkItems = @( $allWorkItems |? {$_.author.login -eq $me -and (UnixTimeStampToDateTime $_.date).Date -eq [DateTime]::Today} )
$totalDuration = ($myWorkItems.duration | measure -Sum).Sum
[timespan]::FromMinutes( $totalDuration ).ToString()