Library of small useful functions
This is a library of functions. These can be put in a file and dot sourced PowerShell starts or they can be used in larger scripts
The libarary contains the following functions:
- function set-windowsize Sets the powershell window size
- function Get-LoggedOnUser Gets current user using explorer process
- function get-timezone([Parameter(Mandatory = $True, Position = 0)][string]$ws) Gets the timezone setting for a computer using wmi
- function get-OS([Parameter(Mandatory = $True, Position = 0)][string] $comp)
- function is-Server([Parameter(Mandatory = $True, Position = 0)][string] $comp)
- function get-os-size([Parameter(Mandatory = $True, Position = 0)][string] $comp)
- function is-pingable([Parameter(Mandatory = $True, Position = 0)][string]$ipAddr)
- Function Delete_Files([Parameter(Mandatory = $True)][string] $Path, [Parameter(Mandatory = $True)][string] $filter, [Parameter(Mandatory = $True)][string] $age, [boolean] $hidden = $true, [boolean] $recurse = $true, [boolean]$myDebug = $false)
- function Convert_String_to_date([Parameter(Mandatory = $True)][string] $myage)
- function Pause ([string]$Message = "Press any key to continue...")
- function Format-HumanReadable([Parameter(Mandatory = $True)][int]$size)
- Function convert-CIDR2Mask
- Function convert-IP2Long
- Function convert-Long2IP
- function do-nslookup ($ipAddr)
- Function get-Network
- Function get-Broadcast
- Function Get-NetworkRange([Parameter(Mandatory = $True)][String]$IP, [Parameter(Mandatory = $True)][String]$Mask )
- Function Get-NumIPS ([Parameter(Mandatory = $True)][string]$strNetwork)
- function get-input([Parameter(Mandatory = $True)][string]$Prompt,[string]$title = "Get Input")
- function show-QuestionBox([Parameter(Mandatory = $True)][string]$message, [Parameter(Mandatory = $True)][string]$title)
- function show-InformationBox ([Parameter(Mandatory = $True)][string]$message, [Parameter(Mandatory = $True)][string]$title)
- function ld-module([Parameter(Mandatory = $true)][string]$module)
- function reset-adaccountpassword([Parameter(Mandatory = $true)][string]$user, [Parameter(Mandatory = $true)][string]$password)
- function get-serviceinfo([Parameter(Mandatory=$true)][string]$serviceName, [string]$computer=".")
- function get-processinfo([Parameter(Mandatory=$true)][string]$processName, [string]$computer=".")
- function get-processes([string]$computer=".")
- function get-aduserbylastname([Parameter(Mandatory=$true)][string]$lastName)
- function get-adcomputerpartial([Parameter(Mandatory=$true)][string]$computerName)
- function get-adgroups([Parameter(Mandatory=$true)][string]$Name)
- function get-bho([Parameter(Mandatory=$true)][string]$computer)
- function Get-Shares
- function open-disk
- function open-display
- function open-events
- function open-grouppolicy
- function open-localusers
- function open-manage
- function open-network
- function open-programs
- function open-securitypolicy
- function open-shares
- function open-system
- function open-timedate
- function open-windowsupdate
- function open-backup
- function open-devicemanager
function set-windowsize { <# .Synopsis Sets the powershell window size .Description Uses the $Host.UI.RawUI object to set the powershell window size .Parameter width width of window .Parameter height height of window .NOTES Author: Tom Willett Date: 6/20/2014 © 2014 Oink Software #> [CmdletBinding()] Param([Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)][string]$width,[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)][string]$height) process { $w = new-object -typename System.Management.Automation.Host.Size $w.height = 400 $w.width = 300 $Host.UI.RawUI.buffersize = $w $w = new-object -typename System.Management.Automation.Host.Size $w.height = $height $w.width = $width $Host.UI.RawUI.windowsize = $w } } function Get-LoggedOnUser { <# .Synopsis Function gets current user using explorer process .Description gets current user by querying the process for user of explorer process .Parameter computername A computer name or ip .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs an object containing the computer name, user and usersid .Inputs A computer name or ip #> [CmdletBinding()] Param ( [Parameter(Mandatory=$false, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [String[]]$ComputerName = $env:COMPUTERNAME )#End Param Begin { Write-Host "`n Checking Users . . . " $i = 0 $MyParams = @{ Class = "Win32_process" Filter = "Name='Explorer.exe'" ErrorAction = "Stop" } }#Begin Process { $ComputerName | Foreach-object { $Computer = $_ $MyParams["ComputerName"] = $Computer try { $processinfo = @(Get-WmiObject @MyParams) if ($Processinfo) { $Processinfo | ForEach-Object { New-Object PSObject -Property @{ ComputerName=$Computer LoggedOn =$_.GetOwner().User SID =$_.GetOwnerSid().sid} } | Select-Object ComputerName,LoggedOn,SID }#If } catch { "Cannot find any processes running on $computer" | Out-Host } }#Forech-object(ComputerName) }#Process End { }#End }#Get-LoggedOnUsers function get-timezone([Parameter(Mandatory = $True, Position = 0)][string]$ws) { <# .Synopsis Function gets the timezone setting for a computer using wmi .Description get-timezone returns an object containing the computer name and timezone or null if error .Parameter ws A computer name or ip .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs an object containing the computer name and timezone or null if error .Inputs A computer name or ip #> $objWMI = get-WMIObject Win32_TimeZone -computer $ws -erroraction silentlycontinue if ($?) { $temp = "" | Select Computer,TimeZone $temp.Computer = $ws $temp.TimeZone = $objWMI.Caption } else { $temp = $null } return $temp } function get-OS([Parameter(Mandatory = $True, Position = 0)][string] $comp) { <# .Synopsis Checks Windows OS Version .Description get-os returns an integer designating the OS version .Parameter comp A computer name or ip .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs Returns 0 if unknown 1 Windows 2000 2 Windows XP 3 Windows XP 64bit 4 Windows Server 2003 (R2) 5 Windows Vista 6 Windows Server 2008 7 Windows 7 8 Windows Server 2008 R2 9 Windows 8 10 Windows Server 2012 .Inputs A computer name or ip #> [int]$os = 0 #first check if it is server 2003 (XP) or server 2008 (Win 7) for paths $Version = gwmi win32_OperatingSystem -computername $comp -ErrorAction SilentlyContinue # if Error return 0 if ($Version -eq $null) { $os = 0 } else { if ($Version.version.startswith("5.0")) { $os = 1 } if ($Version.version.startswith("5.1")) { $os = 2 } if ($Version.version.startswith("5.2")) { $os = 3 if ($Version.Caption.Contains("Server")) { $os = $os + 1 } } if ($Version.version.startswith("6.0")) { $os = 5 if ($Version.Caption.Contains("Server")) { $os = $os + 1 } } if ($Version.version.startswith("6.1")) { $os = 7 if ($Version.Caption.Contains("Server")) { $os = $os + 1 } } if ($Version.version.startswith("6.2")) { $os = 9 if ($Version.Caption.Contains("Server")) { $os = $os + 1 } } } return $os } function is-Server([Parameter(Mandatory = $True, Position = 0)][string] $comp) { <# .Synopsis Checks if windows computer is a server .Description is-server returns true if a server false if workstation null if error .Parameter comp A computer name or ip .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs $true if server $false if workstation $null if error .Inputs A computer name or ip #> $Version = gwmi win32_OperatingSystem -computername $comp -ErrorAction SilentlyContinue $srv = $null if ($Version) { # Set $srv to $true if it is a server else $false $srv = $Version.name.contains("Server") } return $srv } function get-os-size([Parameter(Mandatory = $True, Position = 0)][string] $comp) { <# .Synopsis Checks for operating system size .Description Returns either 32 or 64 as the processor size .Parameter comp A computer name or ip .NOTES Author: Tom Willett Date: 5/9/2014 © 2013 Oink Software .Outputs "32" or "64" reflecting processor size $null if error .Inputs A computer name or ip #> $psize = gwmi win32_processor -computername $comp | select -first 1 | select addresswidth $size = $null if ($psize) { # Set $srv to $true if it is a server else $false $size = $psize.addresswidth } return $size } function is-pingable([Parameter(Mandatory = $True, Position = 0)][string]$ipAddr) { <# .Synopsis Ping a computer .Description is-pingable uses .net to ping a computer .Parameter ipaddr A computer name or ip .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs $true if pingable $false if not pingable .Inputs A computer name or ip #> $ErrorActionPreference = "SilentlyContinue" $Pingable = "" $temp = $null $ping = New-Object System.Net.NetworkInformation.Ping $temp = $ping.send($ipAddr,3000) $Pingable= $temp.Status.toString() return ($Pingable -eq "Success") } # # This function deletes the files and directories in a given path with given filter with a given age and possibly hidden # By default the filter is all files, the age is all files (uses Convert_String_to_date()), hidden files are ignored, it does not recurse subdirectories. # Function Delete_Files([Parameter(Mandatory = $True)][string] $Path, [Parameter(Mandatory = $True)][string] $filter, [Parameter(Mandatory = $True)][string] $age, [boolean] $hidden = $true, [boolean] $recurse = $true, [boolean]$myDebug = $false){ <# .Synopsis This function deletes the files and directories in a given path with given filter with a given age .Description This function deletes the files and directories in a given path with given filter with a given age and possibly hidden By default the filter is all files, the age is all files (uses Convert_String_to_date()), hidden files are ignored, it does not recurse subdirectories. .Parameter Path The path to the files and/or directories to delete (Understands unc paths) .Parameter Filter The file/direcory filter uses standard wildcards .Parameter age How old files/directories to delete (understands days weeks months etc. See convert_string_to_date()) .Parameter hidden if set to $false do not delete hidden files -- default $true .Parameter recurse if set to $false do not recurse -- default $true .Parameter myDebug if set to $true only show what would be deleted -- default $false .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs none .Link convert_string_to_date() #> $dt = Convert_String_to_date($age) if ($recurse) { if ($hidden) { if ($myDebug) { Get-ChildItem $path $filter -force -recurse -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -recurse -whatif -ErrorAction SilentlyContinue } else { Get-ChildItem $path $filter -force -recurse -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -recurse -ErrorAction SilentlyContinue } } else { if ($myDebug) { Get-ChildItem $path $filter -recurse -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -recurse -whatif -ErrorAction SilentlyContinue } else { Get-ChildItem $path $filter -recurse -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -recurse -ErrorAction SilentlyContinue } } } else { if ($hidden) { if ($myDebug) { Get-ChildItem $path $filter -force -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -whatif -ErrorAction SilentlyContinue } else { Get-ChildItem $path $filter -force -recurse -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -ErrorAction SilentlyContinue } } else { if ($myDebug) { Get-ChildItem $path $filter -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -whatif -ErrorAction SilentlyContinue } else { Get-ChildItem $path $filter -ErrorAction SilentlyContinue | where {$_.LastWriteTime -le $dt} | remove-item -force -ErrorAction SilentlyContinue } } } } function Convert_String_to_date([Parameter(Mandatory = $True)][string] $myage) { <# .Synopsis This function converts a string to a date relative to current date .Description This function converts a string to a date relative to current date. The string needs to be in the format 2d for 2 days before now. It understands m for month y for year and h for hour. It returns a datetime object. .Parameter myage The aging string .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software .Outputs none .example convert_string_to_date("3w") Return the date 3 weeks before now .example convert_string_to_date("2y") Return date 2 years before now #> [string]$interval = $myage.get_chars($myage.get_length()-1) [int]$n = $myage.substring(0,$myage.get_length()-1) $dte=(Get-Date) switch ($interval.ToLower()) { "d" { $dte=(Get-Date).AddDays(-$n)} "m" { $dte=(Get-Date).AddMonths(-$n)} "y" { $dte=(Get-Date).AddYears(-$n)} "h" { $dte=(Get-Date).AddHours(-$n)} "default" { $dte=(Get-Date) } } $dte } function Pause ([string]$Message = "Press any key to continue...") { <# .Synopsis Pauses script execution until a key is pressed .Description Pauses script execution until a key is pressed .Parameter message A prompt string Default value is "Press any key to continue ..." .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software #> Write-Host -NoNewLine $Message $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") Write-Host "" } function Format-HumanReadable([Parameter(Mandatory = $True)][int]$size) { <# .Synopsis Formats a number to a human readable string kb mb tb etc .Description Formats a number to a human readable string kb mb gb tb etc .Parameter size A numeric string to convert .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software #> if ($size -ge 1PB) { $hsize = [string][math]::round(($size/1PB),0) + "P" } elseif ($size -ge 1TB) { $isize=[math]::round(($size/1TB),0) $hsize=[string]$isize + "T" } elseif ($size -ge 1GB) { $isize=[math]::round(($size/1GB),0) $hsize=[string]$isize + "G" } elseif ($size -ge 1MB) { $isize=[math]::round(($size/1MB),0) $hsize=[string]$isize + "M" } elseif ($size -ge 1KB) { $isize=[math]::round(($size/1KB),0) $hsize=[string]$isize + "K" } $hsize += "B" return $hsize } Function convert-CIDR2Mask { <# .Synopsis Returns a dotted decimal subnet mask from a mask length. .Description convert-CIDR2Mask returns a subnet mask in dotted decimal format from an integer value ranging between 0 and 32. convert-CIDR2Mask first creates a binary string from the length, converts that to an unsigned 32-bit integer then calls convert-Long2IP to complete the operation. .Parameter MaskLength The number of bits which must be masked. #> [CmdLetBinding()] Param( [Parameter(Mandatory = $True, Position = 0, ValueFromPipeline = $True)] [Alias("Length")] [ValidateRange(0, 32)] $MaskLength ) Process { Return convert-Long2IP ([Convert]::ToUInt32($(("1" * $MaskLength).PadRight(32, "0")), 2)) } } Function convert-IP2Long { <# .Synopsis Converts a Decimal IP address into a 32-bit unsigned integer. .Description convert-IP2Long takes a decimal IP, uses a shift-like operation on each octet and returns a single UInt32 value. .Parameter IPAddress An IP Address to convert. #> [CmdLetBinding()] Param( [Parameter(Mandatory = $True, Position = 0, ValueFromPipeline = $True)] [Net.IPAddress]$IPAddress ) Process { $i = 3; $DecimalIP = 0; $IPAddress.GetAddressBytes() | ForEach-Object { $DecimalIP += $_ * [Math]::Pow(256, $i); $i-- } Return [UInt32]$DecimalIP } } Function convert-Long2IP { <# .Synopsis Returns a dotted decimal IP address from either an unsigned 32-bit integer or a dotted binary string. .Description convert-Long2IP uses a regular expression match on the input string to convert to an IP address. .Parameter IPAddress A string representation of an IP address from either UInt32 or dotted binary. #> [CmdLetBinding()] Param( [Parameter(Mandatory = $True, Position = 0, ValueFromPipeline = $True)] [String]$IPAddress ) Process { Switch -RegEx ($IPAddress) { "([01]{8}\.){3}[01]{8}" { Return [String]::Join('.', $( $IPAddress.Split('.') | ForEach-Object { [Convert]::ToUInt32($_, 2) } )) } "\d" { $IPAddress = [UInt32]$IPAddress $DottedIP = $( For ($i = 3; $i -gt -1; $i--) { $Remainder = $IPAddress % [Math]::Pow(256, $i) ($IPAddress - $Remainder) / [Math]::Pow(256, $i) $IPAddress = $Remainder } ) Return [String]::Join('.', $DottedIP) } default { Write-Error "Cannot convert this format" } } } } function do-nslookup ($ipAddr) { <# .Synopsis Uses .net to do a nslookup .Description Uses .net to do a nslookup .Parameter ipaddr An ip or dns name .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software #> return [System.Net.Dns]::GetHostEntry($ipAddr) } Function get-Network { <# .Synopsis Takes an IP address and subnet mask then calculates the network address for the range. .Description get-Network returns the network address for a subnet by performing a bitwise AND operation against the decimal forms of the IP address and subnet mask. get-Network expects both the IP address and subnet mask in dotted decimal format. .Parameter IPAddress Any IP address within the network range. .Parameter SubnetMask The subnet mask for the network. #> [CmdLetBinding()] Param( [Parameter(Mandatory = $True, Position = 0, ValueFromPipeline = $True)] [String]$IPAddr, [Parameter(Mandatory = $False, Position = 1)] [Alias("Mask")] [Net.IPAddress]$SubnetMask ) Process { if ($IPAddr.Contains("/")) { $temp = $IPAddr.Split("/") [Net.IPAddress]$IPAddr=$temp[0] [Net.IPAddress]$SubnetMask=convert-CIDR2Mask $temp[1] } Return convert-Long2IP ((convert-IP2Long $IPAddr) -BAnd (convert-IP2Long $SubnetMask)) } } Function get-Broadcast { <# .Synopsis Takes an IP address and subnet mask then calculates the broadcast address for the range. .Description get-Broadcast returns the broadcast address for a subnet by performing a bitwise AND operation against the decimal forms of the IP address and inverted subnet mask. get-Broadcast expects both the IP address and subnet mask in dotted decimal format. .Parameter IPAddress Any IP address within the network range. Will also take cidr notation. .Parameter SubnetMask The subnet mask for the network. #> [CmdLetBinding()] Param( [Parameter(Mandatory = $True, Position = 0, ValueFromPipeline = $True)] [String]$IPAddress, [Parameter(Mandatory = $False, Position = 1)] [Alias("Mask")] [Net.IPAddress]$SubnetMask ) Process { if ($IPAddress.Contains("/")) { $temp = $IPAddress.Split("/") [Net.IPAddress]$IPAddress=$temp[0] [Net.IPAddress]$SubnetMask=convert-CIDR2Mask $temp[1] } Return convert-Long2IP $((convert-IP2Long $IPAddress) -BOr ` ((-BNot (convert-IP2Long $SubnetMask)) -BAnd [UInt32]::MaxValue)) } } Function Get-NetworkRange([Parameter(Mandatory = $True)][String]$IP, [Parameter(Mandatory = $True)][String]$Mask ) { <# .Synopsis Given an ip and mask or cidr returns all the addresses in a range .Description Given an ip and mask or cidr returns all the addresses in a range .Parameter ip An ip or cidr range .Parameter mask A network mask .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software #> If ($IP.Contains("/")) { $Temp = $IP.Split("/") $IP = $Temp[0] $Mask = $Temp[1] } If (!$Mask.Contains(".")) { $Mask = convert-CIDR2Mask $Mask } $DecimalIP = convert-IP2Long $IP $DecimalMask = convert-IP2Long $Mask $Network = $DecimalIP -BAnd $DecimalMask $Broadcast = $DecimalIP -BOr ((-BNot $DecimalMask) -BAnd [UInt32]::MaxValue) For ($i = $($Network + 1); $i -lt $Broadcast; $i++) { convert-Long2IP $i } } Function Get-NumIPS ([Parameter(Mandatory = $True)][string]$strNetwork){ <# .Synopsis Given a network range in cidr format return the number of addresses .Description Given a network range in cidr format return the number of addresses .Parameter strNetwork A cidr range .NOTES Author: Tom Willett Date: 6/14/2013 © 2013 Oink Software #> $StrNetworkAddress = ($strNetwork.split("/"))[0] [int]$NetworkLength = ($strNetwork.split("/"))[1] $IPLength = 32-$NetworkLength $NumberOfIPs = ([System.Math]::Pow(2, $IPLength)) Return $NumberofIPs } function get-input([Parameter(Mandatory = $True)][string]$Prompt,[string]$title = "Get Input") { <# .Synopsis Visual Basic input box .Description Visual Basic input box .Parameter prompt Input prompt .Parameter title Title of box default = "Get Input" .Outputs Returns value of input box .NOTES Author: Tom Willett © 2013 Oink Software #> [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") | Out-Null [string][Microsoft.VisualBasic.Interaction]::InputBox($Prompt, $title) } <# Show windows forms message boxes MessageBoxButtons enum OK OKCancel AbortRetryIgnore YesNoCancel YesNo RetryCancel MessageBoxIcon enum None Hand Question Excalmation Asterisk Stop Error Warning Information #> function show-QuestionBox([Parameter(Mandatory = $True)][string]$message, [Parameter(Mandatory = $True)][string]$title) { <# .Synopsis Windows forms question box .Description Windows forms question box .Parameter message Input prompt .Parameter title Title of box .Outputs Returns Yes or No .NOTES Author: Tom Willett © 2013 Oink Software #> [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null [Windows.Forms.MessageBox]::Show($Message, $Title, [Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Question, [System.Windows.Forms.MessageBoxDefaultButton]::Button1, [System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly) } function show-InformationBox ([Parameter(Mandatory = $True)][string]$message, [Parameter(Mandatory = $True)][string]$title) { <# .Synopsis Windows forms Information box .Description Windows forms Information box .Parameter message Input prompt .Parameter title Title of box .Outputs Returns OK .NOTES Author: Tom Willett © 2013 Oink Software #> [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null [Windows.Forms.MessageBox]::Show($Message, $Title, [Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information, [System.Windows.Forms.MessageBoxDefaultButton]::Button1, [System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly) } function ld-module([Parameter(Mandatory = $true)][string]$module) { <# .Synopsis Load a powershell module if it is available .Description This checks if a powershell module is available and loaded. If it is available and not loaded it loads it. .Parameter module Module name .Parameter Password New Password .NOTES Author: Tom Willett © 2013 Oink Software #> if(-not(Get-Module -name $module)) { if(Get-Module -ListAvailable | Where-Object {$_.name -eq $module}) { Import-Module -Name $module $true } else { $false } } else { $true } } function reset-adaccountpassword([Parameter(Mandatory = $true)][string]$user, [Parameter(Mandatory = $true)][string]$password) { <# .Synopsis Reset AD Password .Description Uses ActiveDirectory Module to reset password .Parameter User SAM Account .Parameter Password New Password .Link ld-module .NOTES Author: Tom Willett © 2013 Oink Software #> ld-module ActiveDirectory set-adaccountpassword $user -newpassword (convertto-securestring -asplaintext $password -force) -reset } function get-serviceinfo([Parameter(Mandatory=$true)][string]$serviceName, [string]$computer=".") { <# .Synopsis Gets information about a service using wmi .Description Reads win32_service for a particular service(s) .Parameter serviceName Service display name .Parameter computer computer where service resides .NOTES Author: Tom Willett © 2013 Oink Software #> get-wmiobject -query "select * from win32_service where name like '$serviceName%'" -computername $computer | format-list -property * } function get-processinfo([Parameter(Mandatory=$true)][string]$processName, [string]$computer=".") { <# .Synopsis Gets information about a process using wmi .Description Reads win32_process for a particular process(s) .Parameter processName Process display name .Parameter computer computer where process resides .NOTES Author: Tom Willett © 2013 Oink Software #> get-wmiobject -query "select * from win32_process where name like '$processName%'" -computername $computer | format-list -property * } function get-processes([string]$computer=".") { <# .Synopsis Gets information about all process using wmi .Description Reads win32_process for all processes .Parameter computer computer where processes resides .NOTES Author: Tom Willett © 2013 Oink Software #> get-wmiobject -query "select * from win32_process" -computername $computer | format-list -property * } function get-aduserbylastname([Parameter(Mandatory=$true)][string]$lastName){ <# .Synopsis Gets AD Users by last name .Description Uses RSAT powershell module to get all users by last name .Parameter lastName Lastname or partial (beginning) .NOTES Author: Tom Willett © 2013 Oink Software #> $flt = $lastname + "*" get-aduser -filter {surname -like $flt} -properties mail, description | format-table SamAccountName, name, description, mail } function get-adcomputerpartial([Parameter(Mandatory=$true)][string]$computerName){ <# .Synopsis Gets AD computers with partial name .Description Uses RSAT powershell module to get all computers by partial name .Parameter lastName computername or partial (beginning) .NOTES Author: Tom Willett © 2014 Oink Software #> $flt = $computerName + "*" get-adcomputer -filter {name -like $flt} -properties operatingsystem, CanonicalName | format-table name, CanonicalName, operatingsystem } function get-adgroups([Parameter(Mandatory=$true)][string]$Name){ <# .Synopsis Gets AD Groups by name .Description Uses RSAT powershell module to get all groups by name .Parameter Name Name or partial (beginning) .NOTES Author: Tom Willett © 2013 Oink Software #> $flt = $Name + "*" get-adgroup -filter {Name -like $flt} | format-table Name } function get-bho([Parameter(Mandatory=$true)][string]$computer) { reg query "\\$computer\hklm\software\microsoft\windows\currentversion\explorer\browser helper objects" /s } function Get-Shares { <# .Synopsis Gets shares on a remote server .Description Uses wmi to get shares and path .Parameter server Server name .NOTES Author: Tom Willett © 2013 Oink Software #> param([string]$Server, [string]$drive = "*") $Shares = Get-WmiObject -Class Win32_Share -ComputerName $Server $output = @() ForEach ($Share in $Shares) { $fullpath = “\\{0}\{1}” -f $server, $share.name Add-Member -MemberType NoteProperty -InputObject $Share -Name FullPath -Value $fullpath $output += $Share } if ($drive -eq "*") { Return $output | sort-object path } else { Return $output | where {$_.path -match "^$drive" } | sort-object path } } function open-disk { <# .SYNOPSIS Open Disk Management .DESCRIPTION Open Disk Management .EXAMPLE ps> .\open-disk.ps1 Open Disk Management .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> diskmgmt.msc } function open-display { <# .SYNOPSIS Open Display Properties .DESCRIPTION Open Display Properties .EXAMPLE ps> .\open-display.ps1 Open Display Properties .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> control desk.cpl } function open-events { <# .SYNOPSIS Open Event Viewer .DESCRIPTION Open Event Viewer .EXAMPLE ps> .\open-events.ps1 Open Event Viewer .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> eventvwr.msc } function open-grouppolicy { <# .SYNOPSIS Open Local Group Policy .DESCRIPTION Open Local Group Policy .EXAMPLE ps> .\open-grouppolicy.ps1 Open Local Group Policy .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> gpedit.msc } function open-localusers { <# .SYNOPSIS Open Local Users .DESCRIPTION Open Local Users .EXAMPLE ps> .\open-localusers.ps1 Open Local Users .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> lusrmgr.msc } function open-manage { <# .SYNOPSIS Open Computer Management .DESCRIPTION Open Computer Management .EXAMPLE ps> .\open-manage.ps1 Open Computer Management .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> compmgmt.msc } function open-network { <# .SYNOPSIS Open Network Properties .DESCRIPTION Open Network Properties .EXAMPLE ps> .\open-Network.ps1 Open Network Properties .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> control ncpa.cpl } function open-programs { <# .SYNOPSIS Open Add/Remove Programs .DESCRIPTION Open Add/Remove Programs .EXAMPLE ps> .\open-programs.ps1 Open Add/Remove Programs .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> control appwiz.cpl } function open-securitypolicy { <# .SYNOPSIS Open Local Security Policy .DESCRIPTION Open Local Security Policy .EXAMPLE ps> .\open-Securitypolicy.ps1 Open Local Security Policy .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> secpol.msc } function open-shares { <# .SYNOPSIS Open Share Management .DESCRIPTION Open Share Management .EXAMPLE ps> .\open-shares.ps1 Open Share Management .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> fsmgmt.msc } function open-system { <# .SYNOPSIS Open System Page .DESCRIPTION Open System Page .EXAMPLE ps> .\open-system.ps1 Open System Page .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> control sysdm.cpl } function open-timedate { <# .SYNOPSIS Open Time Date Properties .DESCRIPTION Open Time Date Properties .EXAMPLE ps> .\open-timedate.ps1 Open Time Date Properties .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> control timedate.cpl } function open-windowsupdate { <# .SYNOPSIS Open Windows Update .DESCRIPTION Open Windows Update .EXAMPLE ps> .\open-windowsupdate.ps1 Open Windows Update .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> wuapp } function open-backup <# .SYNOPSIS Open Backup and Restore .DESCRIPTION Open Backup and Restore .EXAMPLE ps> .\open-backup.ps1 Open Backup and Restore .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> sdclt } function open-devicemanager { <# .SYNOPSIS Open Device Manager .DESCRIPTION Open Device Manager .EXAMPLE ps> .\open-DeviceManager.ps1 Open Device Manager .NOTES Author: Tom Willett Date: 9/24/2014 © 2014 Oink Software #> mmc devmgmt.msc }