Commands/Invoke-GMSACommand.ps1
Function Invoke-GMSACommand{ <# .SYNOPSIS Helper command to invoke a scriptblock with credentials (especially helpful with GMSA creds) .DESCRIPTION Will use the open source library SimpleImpersonation to invoke a ScriptBlock with the provided credentials .PARAMETER ScriptBlock Script block to invoke .PARAMETER ArgumentList Argument list for the scriptblock .PARAMETER Credential Credential object (intended to be GMSA credentials, but can be any) .PARAMETER LogonType LogonType Enum - New Credentials are good for most cases. Enum help is here: https://github.com/mj1856/SimpleImpersonation/blob/master/src/LogonType.cs .EXAMPLE Invoke-GMSACommand -ScriptBlock {Write-Host 'test'} -Credential ( Get-GMSACredential -GMSAName 'MyGMSA' -Domain 'test.Domain' ) .NOTES .Author: Ryan Ephgrave #> Param( [ScriptBlock]$ScriptBlock, [Object[]]$ArgumentList, [PSCredential]$Credential, [SimpleImpersonation.LogonType]$LogonType = [SimpleImpersonation.LogonType]::NewCredentials ) $script:CommandOutput = $null $SCred = [SimpleImpersonation.UserCredentials]::new($Credential.GetNetworkCredential().Domain,$Credential.GetNetworkCredential().UserName, $Credential.GetNetworkCredential().Password) [SimpleImpersonation.Impersonation]::RunAsUser( $SCred, $LogonType, [System.Action]{ $Script:CommandOutput = Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList $ArgumentList } ) $script:CommandOutput $script:CommandOutput = $null } |