Get the process owner via PowerShell

0

Let’s say you’ve got an app that needs to be closed throughout your environment.
If you can identify that app by a running process, you’ll probably want to know who has the application/process still running.
For this goal I’ve written the following function in order to get the name of the owner (read: person running the app) of the process.

function Get-ProcessOwner {
    <#
        .SYNOPSIS
        Get the owner of a process.
        .DESCRIPTION
        Get the owner of a process via WMI.
        .PARAMETER ComputerName
        Gets the processes owner of processes running on the specified computers.
        The default is the local computer.
        .PARAMETER ProcessName
        Specifies one or more processes by process name.
        You can type multiple process names (separated by commas).
        .EXAMPLE
        PS C:\> Get-Process -ComputerName minimonster -Name notepad | Get-ProcessOwner

        ProcessName       UserName       Domain          ComputerName      handle
        -----------       --------       ------          ------------      ------
        notepad.exe       Jeff           MINIMONSTER     METHOS            2228
        .EXAMPLE
        PS C:\>  Get-ProcessOwner 'notepad.exe' -ComputerName RDS01

        ProcessName       UserName       Domain          ComputerName      handle
        -----------       --------       ------          ------------      ------
        notepad.exe       Jeff           RDS01           METHOS            2228
        notepad.exe       Lars           RDS01           METHOS            3466
        notepad.exe       Angelique      RDS01           METHOS            8672
        .EXAMPLE
        PS C:\>  Get-ProcessOwner 'notepad.exe' -ComputerName RDS01,MINIMONSTER

        ProcessName       UserName       Domain          ComputerName      handle
        -----------       --------       ------          ------------      ------
        notepad.exe       Jeff           RDS01           METHOS            2228
        notepad.exe       Lars           RDS01           METHOS            3466
        notepad.exe       Angelique      RDS01           METHOS            8672
        notepad.exe       Jeff           MINIMONSTER     METHOS            2228
        .NOTES
        Author: Jeff Wouters
    #>
    [cmdletbinding()]
    param(
        [parameter(mandatory=$false,position=0,valuefrompipelinebypropertyname=$true)]$ComputerName=$env:COMPUTERNAME,
        [parameter(Mandatory=$true,position=1,valuefrompipelinebypropertyname=$true)]$ProcessName
    )
    begin {
        $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($(New-Object System.Management.Automation.PSPropertySet(‘DefaultDisplayPropertySet’,[string[]]$('ProcessName','UserName','Domain','ComputerName','handle'))))
    } process {
        try {
            $Processes = Get-wmiobject -Class Win32_Process -ComputerName $ComputerName -Filter "name LIKE '$ProcessName%'"
        } catch {
            Write-Warning "Unable to query $ComputerName via WMI"
        }
        if ($Processes -ne $null) {
            foreach ($Process in $Processes) {
                $Process | 
                Add-Member -MemberType NoteProperty -Name 'Domain' -Value $($Process.getowner().domain) -PassThru |
                Add-Member -MemberType NoteProperty -Name 'ComputerName' -Value $ComputerName -PassThru |
                Add-Member -MemberType NoteProperty -Name 'UserName' -Value $($Process.getowner().user) -PassThru | 
                Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $PSStandardMembers -PassThru
            }
        } else {
            Write-Warning "No processes found that match the criteria on $ComputerName"
        }
    } end {
    }
}

Get flash version with PowerShell

0

Inventory of software is always fun to do.
I found myself wanting to do an inventory of the versions of Flash that were installed on all systems, so I went to my favorite tool: PowerShell.
When you install Flash at the default location,you can query the version of the file.
With this in mind, I wrote the following function:

function Get-FlashVersion {
    [CmdletBinding()]
    param(
        [parameter(mandatory=$false,position=0,valuefrompipelinebypropertyname=$true)]$ComputerName=$env:ComputerName
    )
    begin {
    } process {
        if(Test-Connection $Computername -count 1 -ErrorAction SilentlyContinue) {
            $filename = "\\$ComputerName\c$\windows\system32\macromed\flash\flash*.ocx"
            if(Test-Path $filename) {
                $file = Get-Item $filename
                $version = $file.versionInfo.fileversion -replace ",","."
            } else {
                $version = "Not Installed"
            }
        } else {
            $Version = 'Offline'
        }
        New-Object -TypeName PSObject |
        Add-Member -MemberType NoteProperty -Name 'ComputerName' -Value $ComputerName -PassThru |
        Add-Member -MemberType NoteProperty -Name 'FlashVersion' -Value $version -PassThru
    }
}

Check if a value is an ip address or not

0

Here’s an easy way to check if a value has the format of an ip address:

CheckIP

Go to Top