Author Posts

June 28, 2014 at 10:06 am

Here is my script:

Invoke-Command -Session $s -ScriptBlock {

$Result = Get-Hotfix | where {$_.hotfixid -eq 'KB2617858'}
if ($Result) {

New-Object PSObject -Property @{Computer = hostname; Installed = $true }

} else {
New-Object PSObject -Property @{Computer = hostname; Installed = $false}

} }

the output flows right thru the pipeline no problem , i can use select and | it to export-csv and then import-csv into a $variable

Is there a way to just save the output from the new-object to a $vairiable

June 28, 2014 at 10:18 am

H Man,

Are you looking for something like this?

$Hotfix = 'KB976002'

$Session = New-PSSession -ComputerName localhost
$Results = Invoke-Command -Session $Session -ScriptBlock {
    $Result = Get-Hotfix -Id $Using:Hotfix
    New-Object -TypeName psobject -Property @{ Installed = ($Result -ne $null) }
}

$Results | Format-Table -Property PSComputerName, Installed -AutoSize

June 28, 2014 at 10:24 am

ill give that a try

June 28, 2014 at 10:35 am

not working! the session i have opened has about 60 computers.

when i run your code i get an error
This command cannot find hot-fix on the machine 'localhost'. Verify the input and Run your command again x60 all with the local host error

In the code im using , im building my object based on if it has it or not so i know the ones that are missing the hotfix

the script im using works great with pushing out the info i have been export-csv to a file and then $data = import-csv thats how i am building the object now and that way looks great.

I was just looking fo r a way to get taht pipeline of info and instead of exporting it saving it to a $variable

June 28, 2014 at 10:43 am

Please share your code based on my example.

June 28, 2014 at 11:15 am

I've added the ErrorAction parameter to the Get-Hotfix line which will suppress the error message.

$Hotfix = 'KB976002'
 
$Results = Invoke-Command -Session $s -ScriptBlock {
    $Result = Get-Hotfix -Id $Using:Hotfix -ErrorAction SilentlyContinue
    New-Object -TypeName psobject -Property @{ Installed = ($Result -ne $null) }
}
 
$Results | Format-Table -Property PSComputerName, Installed -AutoSize

June 28, 2014 at 4:46 pm

$s = New-PSSession -ComputerName (gc c:\computers.txt)
$Hotfix = 'KB976002'

$Results = Invoke-Command -Session $S -ScriptBlock {
$Result = Get-Hotfix -Id $Using:Hotfix
New-Object -TypeName psobject -Property @{ Installed = ($Result -ne $null) }
}

$Results| ft -autosize

June 28, 2014 at 4:46 pm

$Result = Get-Hotfix | where {$_.hotfixid -eq 'KB2617858'}
if ($Result) {

New-Object PSObject -Property @{Computer = hostname; Installed = $true }

} else {
New-Object PSObject -Property @{Computer = hostname; Installed = $false}

} }

June 28, 2014 at 4:47 pm

after the 2nd new-object out-side the icm sricpt block i have been | to export-csv

June 29, 2014 at 3:35 am

Do you want this object to be in a variable in the remote session (inside the script block that's running with Invoke-Command), or back on your local computer? For the former, assign the result from Invoke-Command to a variable. For the latter, you can either assign the result of the "If" statement to a variable, or put variable assignments for both calls to New-Object:

$variable = Invoke-Command (etc)

# or

$variable =  if ($Result)
{
    New-Object (etc)
}
else
{
    New-Object (etc)
}

# or

if ($Result)
{
    $variable = New-Object (etc)
}
else
{
    $variable = New-Object (etc)
}

June 29, 2014 at 5:20 am

thanks Dave ! $variable = Invoke-Command (etc) worked like a charm