Hi Guys,
During my study with PowerShell I was seeking to extend the way the Invoke-Pester works to customize for my company.
I saw Don Jones (many thanks to you btw) earlier tutorials on how to extend existing cmdlets through the use of Proxy Functions. It was exactly what I was looking for.
The goal is to pass parameters to Invoke-Pester but have it shortened to Parameters. I saw June’s example of passing parameters to Pester using a hashtable and the script parameter. (URL link here)
I would like something like this:
Invoke-DCoastest -path ‘c:\test\server01.tests.ps1’ -computername ‘server01’ -ipaddress ‘192.168.1.200’ -primarydns ‘192.168.1.203’ -secondarydns ‘192.168.1.204’ -VMWareToolsVer ‘9.1234.123’ -timeserver ‘192.168.1.209’
I have given a shot and come up with the below:
$scriptCmd = {& $wrappedCmd @PSBoundParameters -Script @{ Path = $path; Parameters = @{ computername = $computername; ipaddress = $ipaddress; primarydns = $primarydns; secondarydns = $secondarydns; timeserver = $timeserver; VMwareToolsVer = $VMWareToolsVer } } }
However for some reason the way I am passing the parameters doesn’t look right.
I would appreciate some feedback to see if I have got it right.
Function Invoke-DCoatest{
[CmdletBinding(DefaultParameterSetName = 'LegacyOutputXml')]
param
(
[Parameter(Position = 0)]
[Alias('Path', 'relative_path')]
[System.Object[]]$Script,
[Parameter(Position = 1)]
[Alias('Name')]
[string[]]$TestName,
[Parameter(Position = 2)]
[switch]$EnableExit,
[Parameter(ParameterSetName = 'LegacyOutputXml',
Position = 3)]
[string]$OutputXml,
[Parameter(Position = 4)]
[Alias('Tags')]
[string[]]$Tag,
[string[]]$ExcludeTag,
[switch]$PassThru,
[System.Object[]]$CodeCoverage,
[switch]$Strict,
[Parameter(ParameterSetName = 'NewOutputSet',
Mandatory = $true)]
[string]$OutputFile,
[Parameter(ParameterSetName = 'NewOutputSet')]
[ValidateSet('LegacyNUnitXml', 'NUnitXml')]
[string]$OutputFormat,
[switch]$Quiet,
[System.Object]$PesterOption,
[Parameter(Mandatory = $true)]
[string]$primarydns,
[Parameter(Mandatory = $true)]
[string]$secondarydns,
[Parameter(Mandatory = $true)]
[string]$VMWareToolsVer,
[Parameter(Mandatory = $true)]
[string]$ipaddress,
[Parameter(Mandatory = $true)]
[string]$computername,
[Parameter(Mandatory = $true)]
[string]$timeserver
)
begin
{
$_ipaddress =$ipaddress
$_computername =$computername
$_primarydns =$primarydns
$_secondarydns =$secondarydns
$_timeserver =$timeserver
$_VMWareToolsVer=$VMWareToolsVer
$PSBoundParameters.Remove('ipaddress')
$PSBoundParameters.Remove('computername')
$PSBoundParameters.Remove('primarydns')
$PSBoundParameters.Remove('secondarydns')
$PSBoundParameters.Remove('timeserver')
$PSBoundParameters.Remove('VMWareToolsVer')
try {
$outBuffer = $null
if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
{
$PSBoundParameters['OutBuffer'] = 1
}
$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Invoke-Pester', [System.Management.Automation.CommandTypes]::Function)
$scriptCmd = {& $wrappedCmd @PSBoundParameters -Script @{ Path = $path; Parameters = @{ computername = $computername; ipaddress = $ipaddress; primarydns = $primarydns; secondarydns = $secondarydns; timeserver = $timeserver; VMwareToolsVer = $VMWareToolsVer } } }
$steppablePipeline = $scriptCmd.GetSteppablePipeline()
$steppablePipeline.Begin($PSCmdlet)
} catch {
throw
}
}
process
{
try {
$steppablePipeline.Process($_)
} catch {
throw
}
}
end
{
try {
$steppablePipeline.End()
} catch {
throw
}
}
}