amazon-web-servicespowershellaws-powershellamazon-workspaces

How can I retrieve all data from a given AWS Powershell cmdlets/alias?


When running a cmdlet like Get-WKSWorkspaces, it will return a set of properties about your workspaces (e.g. WorkspaceID, Username, SubnetID, BundleID, etc.), but not everything you see in the AWS GUI. I am specifically trying to pull things like Running Mode, Compute Type, and Creation Time as well, but can't seem to find where to pull it.

In my research, I got up to the point where I was using $AWSHistory to try and dig deeper into the data returned from my previous cmdlets, but have definitely hit a wall and can't seem to get around it.

I do have a partial command that is giving me most of the output I need:

$region = Get-DefaultAWSRegion
$lastuserconnect = Get-WKSWorkspacesConnectionStatus | Select LastKnownUserConnectionTimestamp

Get-WKSWorkspace -ProfileName ITSLayer1-053082227562-Profile | Select WorkspaceID, UserName, BundleID, DirectoryID, 
@{Name="Region"; Expression={$region.Region}}, 
@{Name="LastKnownUserConnect"; Expression= 
{$lastuserconnect.LastKnownUserConnectionTimestamp}}

Update for posterity: Actually got something decent to come out here. It's slow, but it renders in a table format pretty well and includes a bit at the start to select your AWS region.

Suggestions for improvement include:

  1. Automatically switching the Region select to get all workspaces from the main Regions we use
  2. Cleaning the lines up so it's easier to read
  3. Getting the region to automatically append the filename so it doesn't overwrite your file every time (it's in there but broken at the moment...still pops out a file with 'workspace_properties.csv' as the name)
  4. Optimizing the script because it's pretty slow

    $lastuserconnect = Get-WKSWorkspacesConnectionStatus -ProfileName $profile $defaultregion = Get-DefaultAWSRegion $showallregions = Get-AWSRegion $exportpath = "" + $env:USERPROFILE + "\workspace_properties" + $defaultregion.Region + ".csv"

    $showallregions | Format-Table

    $setregion = Read-Host -Prompt 'AWS Region'

    Clear-DefaultAWSRegion Set-DefaultAWSRegion $setregion

    Get-WKSWorkspace -ProfileName $profile | Select WorkspaceID, UserName, BundleID, DirectoryID, @{Name="ComputeType"; Expression={$.WorkspaceProperties.ComputeTypeName}}, @{Name="RunningMode"; Expression={$.WorkspaceProperties.RunningMode}}, @{Name="Region"; Expression={$defaultregion.Region}}, @{Name="LastKnownUserConnect"; Expression={$_ | foreach {$lastuserconnect = Get-WKSWorkspacesConnectionStatus -ProfileName $profile -WorkspaceId $_.WorkspaceId; echo $lastuserconnect.LastKnownUserConnectionTimestamp}}} | Export-Csv $exportpath


Solution

  • Here is an example of fetching those properties you are looking for:

    Get-WKSWorkspace | foreach {
        $connectionStatus = Get-WKSWorkspacesConnectionStatus -WorkspaceId $_.WorkspaceId; 
        echo "";
        echo "==> About $($_.WorkspaceId)";
        echo "Last State Check: $($connectionStatus.ConnectionStateCheckTimestamp)"; 
        echo "User Last Active: $($connectionStatus.LastKnownUserConnectionTimestamp)";
        echo "Directory: $($_.DirectoryId)";
        echo "Compute: $($_.WorkspaceProperties.ComputeTypeName)"; 
        echo "Running mode $($_.WorkspaceProperties.RunningMode)";
        echo "State $($_.State)"
    }
    

    I don't see a 'Creation Time' on workspace on the console either.

    [edit] I believe you are looking for a way to export these info, may be below code will help:

    [System.Collections.ArrayList]$output=@()
    Get-WKSWorkspace | foreach {
        $connectionStatus = Get-WKSWorkspacesConnectionStatus -WorkspaceId $_.WorkspaceId; 
        $bunch = [pscustomobject]@{
            WorkspaceId = $_.WorkspaceId
            LastStateCheck=$connectionStatus.ConnectionStateCheckTimestamp
            UserLastActive=$connectionStatus.LastKnownUserConnectionTimestamp
            Directory= $_.DirectoryId
            Compute=$_.WorkspaceProperties.ComputeTypeName
            Runningmode= $_.WorkspaceProperties.RunningMode
            State= $_.State
        }
        $output.Add($bunch)|Out-Null
    }
    
    $output | Export-Csv -NoType c:\dd.csv