My first real use of the Powershell Object.  WMI does not have a way to get the Window Title, however, .Net does... and Powershell's get-process can tie all this together...Function  PSGetWindowNamefromPID($PID , optional  $PSObject )
  if  $PSobject ="" 
    $PSObject =CreateObject ("SAPIEN.ActiveXPoSH" )
  endif 
  if  $PSObject.init (not 0 )     
    $PSObject.Execute ('$process=Get-Process | Where-Object {$_.ID -eq "'  + $PID  + '"}' )
    $PSGetWindowNamefromPID =$PSObject.GetValue ('$process.MainWindowTitle' ) 
  endif 
endfunction Function  PSGetPIDfromWindowName($WindowName , optional  $PSObject )
  if  $PSobject ="" 
    $PSObject =CreateObject ("SAPIEN.ActiveXPoSH" )
  endif 
  if  $PSObject.init (not 0 )     
    $PSObject.Execute ('$process=Get-Process | Where-Object {$_.MainWindowTitle -eq "'  + $WindowName  + '"}' )
    $PSGetPIDfromWindowName =$PSObject.GetValue ('$process.ID' ) 
  endif 
endfunction break  on 
$RC =setoption ("NoVarsInStrings" ,"on" )
$RC =setoption ("NoMacrosInStrings" ,"on" )
$RC =setoption ("WrapATEOL" ,"on" )
 
? PSGetWindowNamefromPid (4784 )
? PSGetPIDfromWindowName ("Administrator: Windows Powershell" )