Professional

I interned at Kindred Healthcare for a year and a half before I was hired on as a full-time employee. Throughout my time here I have learned so many valuable skills that would be invaluable to any company. I have learned, practiced, and become quite familiar with skills such scripting, desktop and application virtualization, and Windows Server. I have also become familiar with other administrative tools such as Active Directory, Group Policy, and Registry Editor. These are simply a snapshot of my skills.

Although I was only an intern at Kindred, throughout my time I took on numerous other responsibilities. I assisted my team in whatever capacity I could. I have assisted in the data center migration of the Gentiva systems to our Louisville datacenter, became part of the regular schedule for compliance updates and patching, was the largest contributor to solving end-user issues in our ticket system, and have written a number of scripts to speed up workflows and help with reporting.

Technical Skills

  • Operating Systems

    Windows: Server 2003 – 2016, XP – 10
    macOS: Leopard – Sierra, Server
    Linux: Ubuntu, Debian, Kali Linux

  • Virtual Suite

    Proficient in a multitude of virtual administrative tools in both VMware and Citrix.
    : vSphere, Horizon View, App Volumes, etc.
    : Studio, Director, AppCenter, etc.

  • End-User troubleshooting

    5+ years of end-user troubleshooting experience

    Great, friendly, and patient customer service oriented personality

  • Scripting

    Utilize PowerShell to write numerous scripts to improve daily workflows

PowerShell Snippets

Reset-UserProfile

This is a script that Resets a Kindred user's Citrix profile and fixes any profile permissions.
The steps are as follows:

  1. Get Kindred Domain ID from first & last name
  2. End Citrix XenApp and XenDesktop sessions
  3. Navagate to Citrix Profile Store and rebuild Citrix Profile
  4. Fix Profile permissions

Below is an example of Ending Citrix XenDesktop Sessions:

Invoke-Command{
    $userID = $args[0];
    asnp citrix.*;
    $session = Get-BrokerSession -UserName PROD\$userID
        if ($session.Count -ge 1) {
	          $session | Stop-BrokerSession -ErrorAction SilentlyContinue
        }
        else {#do nothing
        }
    } -computername $brokerServer -ArgumentList $userID

Below is an example of Fixing Profile Permissions:

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ("$userID","FullControl","Allow")
$ACL = (Get-Item $profilePath).GetAccessControl('Access')
$ID = New-Object System.Security.Principal.NTAccount("$userID")
$ACL.SetOwner($ID)
$ACL.SetAccessRule($AccessRule)
Set-ACL -Path $profilePath -AclObject $ACL

ServersNotInWorkerGroups

This is a script that checks to see if a Citrix is in a a workergroup

Below is an exmaple of this workergroup check:

$counter = 0
$servers = Get-XAServer| % {
    $assigned = $null
    $srv = $_.servername
    $workerGroup = Get-XAWorkerGroup -ServerName $srv
    foreach ($wkrp in $workerGroup.workergroupname)
    {
        if ($wkrp -notmatch "Reboot" -and $wkrp -notmatch "CUSTOM" -and $wkrp -notmatch "All Servers")
        {
            $counter += 0
            $assigned = $wkrp
            #Write-Host $srv 'is in' $assigned    #turn on to see which workergroups server x is in

        }

    }
    if ($assigned -eq $null) #$srv doesnt have workergroup
    {
         $counter +=1
         Write-Host $srv 'is not in any farm'
    }

Get-UserDetails

This is more of a helper script that looks up user information in a streamlined way.
The steps are as follows:

  1. Get Kindred Domain ID from first & last name
  2. Create IE Object to Google user's local time.
  3. See if user has any existing Citrix Sessions

Below is an example of creating an IE object and Googling the local time:

$ie = New-Object -ComObject InternetExplorer.Application -ErrorAction Stop
$ie.Visible = $false
$city = $args[0]
$state = $args[1]
$localTime = $args[2]
$googleTime = $args[3]
$ie.Navigate("https://www.google.com/search?q=local+time+in+$city+$state&num=1")
while($ie.Busy) {Start-Sleep -Milliseconds 1}
foreach ($result in $ie.document.getElementbyId("ires")) {
    $initialTime = $result.innerText;
}
#remove all google search text except for time
$googleTime = $initialTime.Substring(0,$initialTime.IndexOf("`n"))

Write-Host "Local Time: " $localTime
Write-Host "Time in $city, $state : " $googleTime