# encoding: ascii
# api: powershell
# title: which\where
# description: This demo looks for files in PATH variable (extensions are from PATHEXT) and presents path for a file in two ways: full path (which mode) and only path for a file (where mode). For example, enter in TextBox field something like ‘notepad’ and click ‘Search’.
# version: 0.1
# type: function
# author: greg zakharov
# license: CC0
# function: Search-WithMode
# x-poshcode-id: 4528
# x-archived: 2013-10-21T07:29:09
# x-published: 2013-10-18T14:41:00
#
#
function Search-WithMode {
if (-not [String]::IsNullOrEmpty($txtFile.Text)) {
foreach ($p in ($env:path -split ';')) {
foreach ($e in ($env:pathext -split ';')) {
$mat = $p + '\' + $txtFile.Text + $e.ToLower()
if (Test-Path $mat) {
if ($rbWhich.Checked) {$lstView.Items.Add($mat)}
elseif ($rbWhere.Checked) {$lstView.Items.Add((Split-Path $mat))}
}
}
}
}
}
function frmMain_Show {
Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Application]::EnableVisualStyles()
$ico = [Drawing.Icon]::ExtractAssociatedIcon(($PSHome + '\powershell.exe'))
$frmMain = New-Object Windows.Forms.Form
$txtFile = New-Object Windows.Forms.TextBox
$btnFind = New-Object Windows.Forms.Button
$rbWhich = New-Object Windows.Forms.RadioButton
$rbWhere = New-Object Windows.Forms.RadioButton
$lstView = New-Object Windows.Forms.ListView
$chFound = New-Object Windows.Forms.ColumnHeader
#
#txtFile
#
$txtFile.Anchor = "Left, Top, Right"
$txtFile.Location = New-Object Drawing.Point(13, 13)
$txtFile.Size = New-Object Drawing.Size(400, 27)
#
#btnFind
#
$btnFind.Anchor = "Top, Right"
$btnFind.Location = New-Object Drawing.Point(423, 13)
$btnFind.Size = New-Object Drawing.Size(90, 22)
$btnFind.Text = "Search"
$btnFind.Add_Click({Search-WithMode})
#
#rbWhich
#
$rbWhich.Anchor = "Left, Top"
$rbWhich.Checked = $true
$rbWhich.Location = New-Object Drawing.Point(13, 33)
$rbWhich.Text = "Which mode"
#
#rbWhere
#
$rbWhere.Anchor = "Left, Top"
$rbWhere.Location = New-Object Drawing.Point(123, 33)
$rbWhere.Text = "Where mode"
#
#lstView
#
$lstView.Anchor = "Left, Bottom, Right, Top"
$lstView.Columns.AddRange(@($chFound))
$lstView.FullRowSelect = $true
$lstView.Location = New-Object Drawing.Point(13, 57)
$lstView.Size = New-Object Drawing.Size(500, 237)
$lstView.View = "Details"
#
#chFound
#
$chFound.Text = "Match(es) history"
$chFound.Width = 495
#
#frmMain
#
$frmMain.ClientSize = New-Object Drawing.Size(527, 312)
$frmMain.Controls.AddRange(@($txtFile, $btnFind, $rbWhich, $rbWhere, $lstView))
$frmMain.FormBorderStyle = "FixedSingle"
$frmMain.Icon = $ico
$frmMain.StartPosition = "CenterScreen"
$frmMain.Text = "Which"
[void]$frmMain.ShowDialog()
}
frmMain_Show