ActionPreference/ActionPreference.ps1
#region Copyright & License # Copyright © 2012 - 2022 François Chabot # # 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. #endregion Set-StrictMode -Version Latest <# .SYNOPSIS Resolve "Action Preferences" from the caller's scope. .DESCRIPTION Script module functions do not automatically inherit their caller's action preferences, but they can be obtained through the $PSCmdlet variable in Advanced Functions. This function is a helper function for any script module Advanced Function: by passing in the values of $PSCmdlet and $ExecutionContext.SessionState, Resolve-ActionPreference will propagate the caller's action preferences locally. .PARAMETER Cmdlet The $PSCmdlet object from a script module Advanced Function. .PARAMETER SessionState The $ExecutionContext.SessionState object from a script module Advanced Function. This is how the Resolve-ActionPreference function sets action preference variables in its callers' scope, even if that caller is in a different script module. .PARAMETER Action Optional array of action parameter names to retrieve from the caller's scope. Default is to retrieve all the following action preferences: Confirm, ErrorAction, InformationAction, Verbose, WarningAction, WhatIf. .EXAMPLE Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState Imports the default PowerShell preference variables from the caller into the local scope. .EXAMPLE Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState -Action ErrorAction, InformationAction Resolve only the ErrorAction and InformationAction preference variables into the local scope. .INPUTS None. This function does not consume pipeline input. .OUTPUTS None. This function does not produce pipeline output. .LINK about_Preference_Variables .LINK https://gallery.technet.microsoft.com/Inherit-Preference-82343b9d .LINK https://powershell.org/2014/01/getting-your-script-module-functions-to-inherit-preference-variables-from-the-caller/ .LINK https://www.powershellgallery.com/packages/Carbon/2.2.0/Content/Functions%5CUse-CallerPreference.ps1 .LINK https://github.com/PowerShell/PowerShell/issues/4568 .NOTES © 2022 be.stateless. #> function Resolve-ActionPreference { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateScript( { $_.GetType().FullName -eq 'System.Management.Automation.PSScriptCmdlet' } )] [System.Management.Automation.PSCmdlet] $Cmdlet, [Parameter(Mandatory = $true)] [System.Management.Automation.SessionState] $SessionState, [Parameter(Mandatory = $false)] [ValidateSet('Confirm', 'Debug', 'ErrorAction', 'InformationAction', 'Verbose', 'WarningAction', 'WhatIf')] [string[]] $Action = @('Confirm', 'Debug', 'ErrorAction', 'InformationAction', 'Verbose', 'WarningAction', 'WhatIf') ) $Action | ForEach-Object -Process { # only propagate inherited action preferences for common action parameters that were not explicitly given by arguments if (-not $Cmdlet.MyInvocation.BoundParameters.ContainsKey($_)) { $actionPreference = $Cmdlet.SessionState.PSVariable.Get($preferenceVariables.$_) # only propagate inherited action preferences whose according preference variables have been given a value if ($actionPreference) { if ($SessionState -eq $ExecutionContext.SessionState) { Set-Variable -Scope 1 -Name $actionPreference.Name -Value $actionPreference.Value -Force -Confirm:$false -WhatIf:$false } else { $SessionState.PSVariable.Set($actionPreference.Name, $actionPreference.Value) } } } } } $script:preferenceVariables = @{ 'Confirm' = 'ConfirmPreference' 'Debug' = 'DebugPreference' 'ErrorAction' = 'ErrorActionPreference' 'InformationAction' = 'InformationPreference' 'Verbose' = 'VerbosePreference' 'WarningAction' = 'WarningPreference' 'WhatIf' = 'WhatIfPreference' } # SIG # Begin signature block # MIII0QYJKoZIhvcNAQcCoIIIwjCCCL4CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUIy9K0yfGQ65We4tCzGKM/VE/ # Lf2gggVMMIIFSDCCAzCgAwIBAgIJAJkr3mJdTBkUMA0GCSqGSIb3DQEBCwUAMEEx # PzA9BgNVBAMeNgBpAGMAcgBhAGYAdABzAG8AZgB0AHcAYQByAGUAQABzAHQAYQB0 # AGUAbABlAHMAcwAuAGIAZTAeFw0yMTA2MjUxNDEyMjNaFw00MTA2MjAxNDEyMjNa # MEExPzA9BgNVBAMeNgBpAGMAcgBhAGYAdABzAG8AZgB0AHcAYQByAGUAQABzAHQA # YQB0AGUAbABlAHMAcwAuAGIAZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC # ggIBAOeqdUHBv7sxSeX3aj6yPKj7PAvs8izpVXjyEBl5aR8mQneVcXuF53AH7EW1 # 6E5p4+Az5pJPGUD5c3tXhiGMF7vgLhQjO6hlaVBRIqiIYHikNLwMNy6YBMc/QQYM # rPhqHEFsZ53dkBIIj3M8e3kFcTFA09n25yDtTPDab4nd9yUhc9Qc8+nfpIzfYsoP # 1pZ3nCzhw6hN2/44v1dkQrG3dRYwt+px65p6NPNZWEJpt4VCJjIFh+lBYJdxm9d4 # X/rAnlHIkbv7liOavWDzgHVabS3hdAWtcDmynm+7+FcZDFqPWNCl3e4SS7xe4s/R # CKFKA0IsfKkSk9YJlLgeSQIEXUOOWXJAGaLqnRD8xWLZsc4Oi9GZg7XV1mv/S88c # oztXnwtAN3OOlRKBh2QbomMgxeMO0GvsLE/cq5Q/YKAoz+KGr/7LcZq9jzQ8IPus # ZvWLeDXmxPiwJjpZc1koLgfGIEX2NStQTT3QmacWr9thrWcKvI+4uBmI4exS9B4a # R3nV91w5EY+2RoYsHqej9LWwNamO96+jMX9pxprTX+EkLUuMAikw/po8sBC9MUUn # 5pMWmUv7DCtQOLGGBDDMMMkn4ZcjpCEEdPGHRKfqNnD27ssGtDjiNzfQrsm67toU # bBwUF+gyJq/YckWquYJhA9ZOFWEADuIwGnsOzsoRvuQyY+p9AgMBAAGjQzBBMA4G # A1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzAXBgNVHREEEDAO # ggxzdGF0ZWxlc3MuYmUwDQYJKoZIhvcNAQELBQADggIBACithYM3qckZRc9+Xbfu # a6gWr3HwjrW+FHKgjfrcOm8ZnLVapb9xFqsqrRQqd3RXWQDINEGrtI2rSfrzyfoK # UiTgldIfQNP1ZcGY229d++90t3hdo2mlt05hjYlbMENloJHpsEP0vQZmwOcEimCT # ex1pymYM+P9pj3j8UD1PT1eIZot6or8fBRl63UybyDSrM7L4UOkkAOniKxWy5pW6 # 6duS8SR+SZpr3Bv44NyXPj0Nv+MIpLmsLrd7XPBFmnGxzY01ZO9vzi9KEhM2wT5i # jPqHDNOvfPiADtAa+EyUBzdJiqy9heCz/TMZQgMWGwtfqJNxWZmsHcha2anW4Qt+ # mzrLO4GojWoVog9uVSAq+l0a+YQsd1u1kUmm4vgZCFyUA+lEp4LkI7ca2VBHkLPD # w+u2DoDMRiqFPZjO7BCKjGc0jj9B/qGR3JVt+tqDdB621xXf2YGF2oFvxZQ/keGt # 0ujfJ+JwN3nCulDAA4773q6KUnfykyrvAgITNbRJL6TngeRKtw9VIJBPxzqMzLpV # 5ggXNituwLaD1CCBJ1oo9DZHpL9gplXp1wGrelJOTiJhh+pdNsPtRH7CrranWa5h # LFLuigqin0eewQ5giJ1VaiBVEseOmiZog+27UpFIv40aDzgGL3YxB/Mu0ojwrQtp # WLmqJCmWnR5qxOm0yK+zNWe0MYIC7zCCAusCAQEwTjBBMT8wPQYDVQQDHjYAaQBj # AHIAYQBmAHQAcwBvAGYAdAB3AGEAcgBlAEAAcwB0AGEAdABlAGwAZQBzAHMALgBi # AGUCCQCZK95iXUwZFDAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAA # oQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4w # DAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQU3lHY3scDldGuth3cKdlRRmh9 # 9rQwDQYJKoZIhvcNAQEBBQAEggIAypBB1ZWWGJwI0hyIDB3RENlWj00xGTcSQFE1 # c+CbO8TNFqml+qeekRB+l7JK7ZcDBTDdC3hhiZKszDBHnTIHlgRRa9uDmoHiZgJy # pB7JhNBUrqRSAs4+lJsq2y1DiJvjd3N4588IHK3vstqLdET7FuR/CU5Y2pC6pf/T # Raxq1O9oMX6B92DOLZVESxgY/Cs6Ah7xkprQWqSfcT8Cc5H4fsHRGjo+x1DwH/d6 # Utb43GLhWqY9zlXbFy3pibDxOizf5H/B7QSVbEGVbzr3co0MMncCblaEGJx0Aqmz # VRCPsb0PYQlBUzSKAUu87RfFo3h+9Otoe4qc1Qv5PnW0bF4JU/jV4VkTJ9TG6oNq # BTh7HoclV9mbT2I/TpsI2Kc12BUXrS7niIQzQJWfEZ+IacMhAZmem7X18PjwO5HH # EYCcIpD8pgLoUxBoqvVQCdZbEmfNn7WovmJYk0VJT/kCQ2YYuVzx50v64zdBmnex # VF6rY/Pcx1afLZ6zJaRYftmxlxlhijQ+e5u81E3mDL4pszy3bSwL64OVpqzwK58+ # gBRIK6v8P4fZj9Co7PtJ8wG7MO8idr0T/1gw5nNdEvspzb047L90+8wkUyHDfeLV # Ixejht5bt9ecP75EGw9g1U7LEbIp9OyvSM3z58BBnuJUhkTANk1Ofk2bmeTwOu1J # ydeElP0= # SIG # End signature block |