GcePSSession.psd1

#
# Module manifest for module 'GcePSSession'
# PowerShell remoting sessions for Google Cloud Engine VMs via IAP Tunnel
#
# Generated by: Roger Wood
# Generated on: 2025-01-XX
#

@{

# Script module or binary module file associated with this manifest.
RootModule = 'GcePSSession.psm1'

# Version number of this module.
ModuleVersion = '1.0.13'

# Supported PSEditions
# CompatiblePSEditions = @()

# ID used to uniquely identify this module
GUID = '9b7281cf-c80f-44bb-96c0-ed1137056164'

# Author of this module
Author = 'Roger Wood'

# Company or vendor of this module
CompanyName = 'Roger Wood'

# Copyright statement for this module
Copyright = '(c) 2025 Roger Wood. All rights reserved.'

# Description of the functionality provided by this module
Description = 'PowerShell remoting sessions for Google Cloud Engine (GCE) VM instances using IAP Tunnel. Note: New-GcePSSession requires PowerShell 6.0+ for SSH remoting support.'

# Minimum version of the Windows PowerShell engine required by this module
PowerShellVersion = '3.0'

# Name of the Windows PowerShell host required by this module
# PowerShellHostName = ''

# Minimum version of the Windows PowerShell host required by this module
# PowerShellHostVersion = ''

# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# DotNetFrameworkVersion = ''

# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# CLRVersion = ''

# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''

# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()

# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()

# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()

# Format files (.ps1xml) to be loaded when importing this module
# FormatsToProcess = @()

# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @()

# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @('New-GcePSSession', 'Remove-GcePSSession', 'Set-GcePSSession', 'New-GceSshTunnel', 'Get-GceSshTunnel', 'Remove-GceSshTunnel')

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()

# Variables to export from this module
VariablesToExport = '*'

# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
AliasesToExport = @()

# DSC resources to export from this module
# DscResourcesToExport = @()

# List of all modules packaged with this module
# ModuleList = @()

# List of all files packaged with this module
# FileList = @()

# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{

    PSData = @{

        # Tags applied to this module. These help with module discovery in online galleries.
        Tags = @('GCP','GCE','IAP','PSRemoting','GoogleCloud','Google','Cloud','SSH','Tunnel','Remote')

        # A URL to the license for this module.
        LicenseUri = 'https://github.com/rwood/GcePSSession/blob/main/LICENSE.md'

        # A URL to the main website for this project.
        ProjectUri = 'https://github.com/rwood/GcePSSession'

        # A URL to an icon representing this module.
        # IconUri = ''

        # ReleaseNotes of this module
        ReleaseNotes = @'
Version 1.0.13 - Refactoring and improvements
 
Changes:
- Moved SSH configuration logic from New-GcePSSession to New-GceSshTunnel
- SSH config is now set up when tunnel is created, ensuring it's ready for all sessions
- Added SSHKeepAliveInterval parameter to New-GceSshTunnel (default: 60 seconds)
- Removed TunnelInfo PSCustomObject, use GceSshTunnel object properties directly
- Added OwnsTunnel property to PSSession to track tunnel ownership
- Remove-GcePSSession now only removes tunnels owned by the session
- Sessions that reuse existing tunnels will not close them when removed
- Improved separation of concerns: tunnel creation handles all tunnel infrastructure
 
Version 1.0.12 - New features
 
Changes:
- Added SSH keepalive settings (ServerAliveInterval and ServerAliveCountMax) to prevent tunnel timeouts
- Added -IdleTimeout parameter to control PSSession idle timeout (default: unlimited)
- Added -SSHKeepAliveInterval parameter to configure SSH keepalive interval (default: 60 seconds)
- SSH config entries now automatically include keepalive settings to prevent connection drops
- Improved SSH config update logic to ensure keepalive settings are always present
 
Version 1.0.11 - Bug fixes and improvements
 
Changes:
- Changed tunnel ID to use Python process PID (the actual tunnel process spawned by gcloud)
- Added logic to find Python child process spawned by gcloud/PowerShell wrapper
- Falls back to PowerShell process PID if Python process not found
- Renamed TunnelReadyTimeout parameter to ReadyTimeout to avoid parameter name conflict with -Tunnel
- Fixed parameter binding issue where -Tunnel was matching TunnelReadyTimeout
 
Version 1.0.10 - New features
 
Changes:
- Added Initialize-GcePSSession.ps1 initialization script
- Script checks for PowerShell Core 7.5+ and offers MSI installation if needed
- Automatically creates SSH key pair and configuration file
- Interactive setup wizard for first-time users
- Supports non-interactive mode with parameters
- No dependency on Chocolatey - uses official MSI installer
 
Version 1.0.9 - New features
 
Changes:
- Added Set-GcePSSession function to manage configuration file
- Set-GcePSSession allows users to set default KeyFilePath and UserName values
- Configuration file is automatically created as hidden if it doesn't exist
- Only specified parameters are updated, preserving existing values
- Improves user experience by providing a convenient way to configure defaults
 
Version 1.0.8 - New features
 
Changes:
- Added support for JSON config file fallback for KeyFilePath and UserName parameters
- New-GcePSSession now reads from $env:USERPROFILE\.GcePSSession.json if parameters are not provided
- Config file values are only used when parameters are not explicitly specified
- Improves usability by allowing default credentials to be configured per user
 
Version 1.0.7 - Bug fixes
 
Changes:
- Fixed double-quoting issue in gcloud path handling for -File parameter
- Removed double-quoting of paths in arguments array
- Paths are now only quoted when building the final arguments string
- Prevents "Illegal characters in path" errors when paths contain spaces
 
Version 1.0.6 - Bug fixes
 
Changes:
- Fixed SSH permissions function to use SecurityIdentifier object directly
- Resolved "Some or all identity references could not be translated" error
- Improved access rule removal to avoid modification during iteration
 
Version 1.0.5 - Bug fixes
 
Changes:
- Fixed SSH config file permissions for OpenSSH on Windows
- Added automatic permission correction for .ssh directory and config file
- Sets proper owner and ACL to prevent "Bad permissions" errors
- Disables inheritance to meet OpenSSH strict permission requirements
 
Version 1.0.4 - Bug fixes and improvements
 
Changes:
- Fixed gcloud path quoting for paths with spaces in directory names
- Improved command-line argument quoting for both -File and -Command execution
- Enhanced module loading to track successfully loaded functions
- Added verification that functions exist before exporting
- Updated module description to note PowerShell 6.0+ requirement
 
Version 1.0.3 - Bug fixes
 
Changes:
- Fixed handling of gcloud paths with spaces in directory names
- Improved path quoting for PowerShell script execution
 
Version 1.0.2 - Refactoring and improvements
 
Changes:
- Moved Install-GceWindowsSsh to standalone script (no longer part of module)
- Script can now be downloaded and run directly on Windows VMs
- Updated documentation and build scripts
 
Version 1.0.1 - Bug fixes and improvements
 
Changes:
- Removed Invoke-GceCommandAs function (use New-GcePSSession with Invoke-Command instead)
- Updated copyright and author information
- Fixed module manifest metadata
- Updated repository URLs
 
Version 1.0.0 - Initial release
 
Features:
- Create PowerShell remoting sessions to GCE Windows VMs via IAP tunnels
- Install and configure SSH server on Windows VMs
- Automatic tunnel management and cleanup
- Support for SSH key and credential authentication
'@


    } # End of PSData hashtable

} # End of PrivateData hashtable

# HelpInfo URI of this module
# HelpInfoURI = ''

# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''

}