Question on building an object

Welcome Forums General PowerShell Q&A Question on building an object

This topic contains 5 replies, has 5 voices, and was last updated by

 
Participant
9 months, 1 week ago.

  • Author
    Posts
  • #93502

    Participant
    Points: 0
    Rank: Member

    I want to create an object based on the cmd command

    (openfiles /query /s SERVERNAME)

    I can get all the properties in the fashion I want by doing a split, and the below works on adding the last item in the array to the object...but how can i get them all listed in the object so i could do a command like...

    $object | ? {$_.'accessed by' -eq "Username"}
    foreach($line in (openfiles /query /s SERVERNAME))
    {
    	$props = @{
    	ID = ($line.Split(" ") | ?{$_ -notlike ""})[0]
    	'Accessed By' = ($line.Split(" ") | ?{$_ -notlike ""})[1]
    	Type = ($line.Split(" ") | ?{$_ -notlike ""})[2]
    	'Open File (Path\executable)' = ($line.Split(" ") | ?{$_ -notlike ""})[3]
    	}
    }
    
    $object = new-object psobject -Property $props
    
    
  • #93504

    Keymaster
    Points: 1,639
    Helping HandTeam Member
    Rank: Community Hero

    You're on the right track. You're not trying to create AN objects, though, you need to create MULTIPLE OBJECTS. One object for each whatever it is you want.

    You'd normally do this in a function, and the function uses Write-Output to emit each object, as it's created, to the pipeline. You could then pipe them to something else.

  • #93507
    js

    Participant
    Points: 224
    Helping Hand
    Rank: Participant

    Some ways to do it here, like either exporting to csv or using get-smbopenfile instead:

    https://stackoverflow.com/questions/30145539/openfiles-query-to-see-open-files

  • #93529

    Participant
    Points: 19
    Rank: Member

    Well it might not be the best solution.

    • Declare $objectarray as an array before your. For Loop
    • Move $object = New-Object PSobject -properties $prop
      within the closing brace } of the for loop
    • Then use $objectarray += $object inside the loop as well
    • In the end $objectarray will have an array of objects.

    **This is the way I used to do things too, but no longer ** Since being on this forum, and reading a lot about Powershell I now write functions as Don Jones suggested. Maybe look into this solution when you have the time.

  • #93531
    Jon

    Participant
    Points: 27
    Rank: Member
  • #93544

    Participant
    Points: 0
    Rank: Member

    Thanks Jon! That article was very helpful. I was able to complete the task using the below code:

    function Get-OpenFiles
    {
    	(openfiles /query /s SERVERNAME) |
    	Select-Object -Skip 3 |
    	ForEach-Object {
    		$OpenFiles = $_.Trim() |
    		ConvertFrom-String -PropertyNames 'ID','Accessed By','Type','Open File (Path\executable)'
    		$OpenFiles.PSTypeNames[0] ='SMB.OpenFiles'
    		$OpenFiles
    	}
    } 
    

The topic ‘Question on building an object’ is closed to new replies.