powershell/Find-GcResource.ps1 (159 lines of code) (raw):

# Copyright(c) 2016 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. ############################################################################## #.SYNOPSIS # List all the resources visible to Google Cloud Tools for PowerShell. # #.PARAMETER $ProjectId # List all the resources for this project id. # #.DESCRIPTION # This doesn't list everything. For example, it tells you nothing about logs # or datastore. As additional commands are added to # Google Cloud Tools for PowerShell, they'll be added here. # #.OUTPUTs # A formatted list of Google Cloud resources. ############################################################################## Param([string] $ProjectId) ############################################################################## #.SYNOPSIS # Get the project id that Google Cloud commands will use by default. # #.OUTPUTs # The current project id. ############################################################################## function Get-GcProject { $stderr = [System.IO.Path]::GetTempFileName() $lines = gcloud config list project 2> $stderr if (0 -ne $LASTEXITCODE) { Write-Error (Get-Content $stderr) } foreach ($line in $lines) { $subs = $line.Split("=", 2) if ($subs.Length -eq 2) { $subs[1].Trim() } } } ############################################################################## #.SYNOPSIS # Set the project id that Google Cloud commands will use by default. # #.PARAMETER $ProjectId # The new project id to use by default. ############################################################################## function Set-GcProject([string]$ProjectId) { $stderr = [System.IO.Path]::GetTempFileName() gcloud config set project $ProjectID } ############################################################################## #.SYNOPSIS # List all the Google Cloud projects that you have permission to see. # #.OUTPUTs # A list of Google Cloud projects. ############################################################################## function Find-GcProject { gcloud projects list } ############################################################################## #.SYNOPSIS # List all the resources visible to Google Cloud Tools for PowerShell. # #.PARAMETER $ProjectId # List all the resources for this project id. # #.DESCRIPTION # This doesn't list everything. For example, it tells you nothing about logs # or datastore. As additional commands are added to # Google Cloud Tools for PowerShell, they'll be added here. # #.OUTPUTs # A list of Google Cloud resources. ############################################################################## function Find-GcResource([string]$ProjectId) { if (-not $ProjectId) { $ProjectId = Get-GcProject } # Google Cloud Storage Ignore-ApiNotEnabled { $buckets = Get-GcsBucket -Project $ProjectId $buckets foreach ($bucket in $buckets) { Get-GcsObject -Bucket $bucket } } # Google Compute Engine Ignore-ApiNotEnabled { Get-GceAddress -Project $ProjectId Get-GceBackendService -Project $ProjectId Get-GceDisk -Project $ProjectId Get-GceFirewall -Project $ProjectId Get-GceForwardingRule -Project $ProjectId Get-GceHealthCheck -Project $ProjectId Get-GceInstance -Project $ProjectId Get-GceInstanceTemplate -Project $ProjectId Get-GceManagedInstanceGroup -Project $ProjectId Get-GceNetwork -Project $ProjectId Get-GceRoute -Project $ProjectId Get-GceSnapshot -Project $ProjectId Get-GceTargetPool -Project $ProjectId Get-GceTargetProxy -Project $ProjectId Get-GceUrlMap -Project $ProjectId } # Google Cloud Sql Ignore-ApiNotEnabled { Get-GcSqlInstance -Project $ProjectId } # Google Cloud Dns Ignore-ApiNotEnabled { $zones = Get-GcdManagedZone -Project $ProjectId foreach ($zone in $zones) { Get-GcdResourceRecordSet $zone -Project $ProjectId } } } ############################################################################## #.SYNOPSIS # Ignores accessNotConfigured exceptions. # #.DESCRIPTION # If you haven't enabled cloud dns in your project, then there are no cloud # dns resources to report. No need to report an error. ############################################################################## function Ignore-ApiNotEnabled($ScriptBlock) { try { . $ScriptBlock } catch { if (-not $_.Exception.Message.Contains("accessNotConfigured")) { throw } } } ############################################################################## #.SYNOPSIS # Formats Google Cloud Resources in a pretty table. # #.INPUTS # Google Cloud Resource objects. # #.OUTPUTS # A pretty text table. ############################################################################## function Format-GcResource { $input | Format-Table -GroupBy Kind -Property Size, SizeGb, DiskSizeGb, Name } Find-GcResource $ProjectId | Format-GcResource