combining output from two commands

Welcome Forums General PowerShell Q&A combining output from two commands

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

3 years, 2 months ago.

  • Author
  • #45186

    Topics: 2
    Replies: 2
    Points: 0
    Rank: Member

    Ok, I'm trying to learn, and I usually do that by kludging pieces of other's code together to make it work for my purposes. What I'd like to do (converting to html or not) is combine specific fields of get-fsrmquota and a query of share info into one 'report'. while this only looks at 1 computer, I'd like to do it for a list with the option of 1 big output, or 1 output for each computer in the list ala ForEach ($system in Get-Content "c:\temp\systems.txt"
    I'm sure there are syntax usage errors in this also (ie, semicolon versus comma)
    Any help given is greatly appreciated.

    $fileserver = Read-Host “Enter Server Name”
    $Header = @"
    TABLE {border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
    TH {border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color: #6495ED;}
    TD {border-width: 1px;padding: 3px;border-style: solid;border-color: black;}
    TR:Hover TD {Background-Color: #C1D5F8;}
    # Quota
    $quota = Get-FSRMQuota -CimSession $fileserver | select @{name='Backend Server';expression={$_.PSComputerName}},Path,@{n='Quota Size (in GB)';e={[int]($_.Size/1GB)}},@{n='GB Usage';e={[int]($_.Usage/1GB)}} #| Export-csv QuotaOutput.csv -append
    # Share Permissions
    # ExportShareInfo.ps1
    # This script will export type 0 shares with security info, and provide a hash table of shares
    # in which security info could not be found.
    # SID was removed from the script. Instead, the username is used to find SID when the import is run
    # EricG-thehashtable of problemshares never worked for me
    $date = get-date
    $datefile = get-date -uformat '%m-%d-%Y-%H%M%S'
    #Store shares where security cant be found in this hash table
    $problemShares = @{}
    Function Get-ShareInfo($shares) {
    $arrShareInfo = @()
    Foreach ($share in $shares) {
    write-host $
    $strWMI = "\\" + $fileServer + "\root\cimv2:win32_LogicalShareSecuritySetting.Name='" + $ + "'"
    $objWMI_ThisShareSec = $null
    $objWMI_ThisShareSec = [wmi]$strWMI
    #In case the WMI query or 'GetSecurityDescriptor' fails, we retry a few times before adding to 'problem shares'
    For($i=0;($i -lt 5) -and ($objWMI_ThisShareSec -eq $null);$i++) {
    sleep -milliseconds 200
    $objWMI_ThisShareSec = [wmi]$strWMI
    $objWMI_SD = $null
    $objWMI_SD = $objWMI_ThisShareSec.invokeMethod('GetSecurityDescriptor',$null,$null)
    For($j=0;($j -lt 5) -and ($objWMI_SD -eq $null);$j++) {
    sleep -milliseconds 200
    $objWMI_SD = $objWMI_ThisShareSec.invokeMethod('GetSecurityDescriptor',$null,$null)
    If($objWMI_SD -ne $null) {
    $arrShareInfo += $objWMI_SD.Descriptor.DACL | % {
    $_ | select @{e={$};n='Name'},
    Else {
    $ProblemShares.Add($, "failed to find security info")
    return $arrshareInfo
    $shares = gwmi Win32_Share -computer $fileServer -filter 'type=0'
    $ShareInfo = Get-ShareInfo($shares)
    Write-Host " Complete" -ForegroundColor green
    # not used atm.  filter out usernames of "system" and "administrators"
    #  $ShareInfo | select Name,Path,Description,User,Domain,AccessMask,AceFlags,AceType | where user -ne 'system' | where user -ne 'administrators' | export-csv -noType $filename
    # combine quota and share info
    $combinedinfo = $quota.@{name='Backend Server';
    $quota.@{name='Quota Size (in GB)';
    expression={[int]($quota_.Size/1GB)}},$quota.@{n='GB Usage';
    $tableinfo = New-Object -TypeName psobject -Property $combinedinfo
    # output
    ConvertTo-HTML -InputObject $tableinfo -Head $Header -Title "Quota Information" | Out-File "C:\temp\QuotaInfo.htm"
    Invoke-Item -Path "C:\temp\quotainfo.htm"

    New-Object : Cannot convert 'System.Object[]' to the type 'System.Collections.IDictionary' required by parameter 'Property'. Specified method is not supported.
    At \\site-it-fs\root\DDOAdmin\Scripts\Powershell\Quota-ShareInfo\Combined_quota-shareinfo-html.ps1:97 char:54
    + $tableinfo = New-Object -TypeName psobject -Property $combinedinfo
    + ~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [New-Object], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand

  • #45192

    Topics: 13
    Replies: 4872
    Points: 1,843
    Helping HandTeam Member
    Rank: Community Hero

    So, have you read our HTML Reporting book (Ebooks menu)? It tackles pretty much this exact topic in a fairly methodical way – and i think it'll mean less work for you.

    The problem is that $combinedinfo isn't a hashtable.

    $combinedInfo = @{ 'Property' = 'Value'
    'Property' = 'Value'
    'Property' = 'Value'

    Is what I'd expect. But you've just supplied values, and you've one it as an array of objects. I'll also recommend "Learn PowerShell Toolmaking in a Month of Lunches." It really explains the whys and hows of what you're after, and it'll set you on a pth toward doing it right, in terms of making your code PowerShell-friendly.

  • #45196

    Topics: 2
    Replies: 2
    Points: 0
    Rank: Member

    I'll definitely take a look. thanks for the heads up.

The topic ‘combining output from two commands’ is closed to new replies.