Convert-CommandToHash.ps1
#requires -version 3.0 #Convert the named parameter part of a command into a hash table in the ISE Function Convert-CommandtoHash { [cmdletbinding()] Param( [ValidateNotNullorEmpty()] [string]$Text = $psise.currentfile.editor.SelectedText ) Set-StrictMode -Version latest New-Variable astTokens -force New-Variable astErr -force Write-verbose "Converting $text" $ast = [System.Management.Automation.Language.Parser]::ParseInput($Text,[ref]$astTokens,[ref]$astErr) #resolve the command name $cmdType = Get-Command $asttokens[0].text if ($cmdType.CommandType -eq 'Alias') { $cmd = $cmdType.ResolvedCommandName } else { $cmd = $cmdType.Name } Write-Verbose "Command is $cmd" Write-Verbose ($astTokens | out-string) #last item is end of input token $r= for ($i = 1;$i -lt $astTokens.count-2 ;$i++) { if ($astTokens[$i].ParameterName) { $p = $astTokens[$i].ParameterName write-verbose "Parameter name = $p" write-verbose ($astTokens[$i] | out-string) $v="" #check next token if ($astTokens[$i+1].Kind -match 'Parameter|NewLine|EndOfInput') { #the parameter must be a switch $v= "`$True" } else { While ($astTokens[$i+1].Kind -notmatch 'Parameter|NewLine|EndOfInput') { #break out of loop if there is no text write-verbose "While: $($astTokens[$i])" $i++ #test if value is a string and if it is quoted, if not include quotes if ($astTokens[$i].Text -match "\D" -AND $astTokens[$i].Text -notmatch """\w+.*""" -AND $astTokens[$i].Text -notmatch "'\w+.*'") { #ignore commas and variables if ($astTokens[$i].Kind -match 'Comma|Variable') { $value = $astTokens[$i].Text } else { #Assume text and quote it Write-Verbose "Quoting $($astTokens[$i].Text)" $value="'$($astTokens[$i].Text)'" } } else { Write-Verbose "Using text as is for $($astTokens[$i].Text)" $value = $astTokens[$i].Text } Write-Verbose "Adding $Value to `$v" $v+= $value } } #while "$p = $v`r" Write-Verbose "hashentry -> $p = $v`r" } } #for Write-Verbose "Finished processing AST" Write-verbose ($r | out-string) #create text $hashtext = @" `$paramHash = @{ $r} $cmd @paramHash "@ #insert the text which should replace the highlighted line $psise.CurrentFile.Editor.InsertText($hashtext) } |