Get-ASCatalogItem

AdminStudio 2020 | 19.0 | AdminStudio PowerShell Cmdlets

Edition:Powershell cmdlets are enabled with AdminStudio Enterprise Edition and with Workflow Manager.

The Get-ASCatalogItem cmdlet returns a list of the root items of the specified type: Group, Application, or Package. For example, if you use this cmdlet with the ItemType of Group, the applications in the specified group will be listed, along with each application’s RowID. If you use an ItemType of Application, that application’s packages will be listed, along with each package’s RowID.

You can use this cmdlet to display the groups, applications, and packages in your Application Catalog from a source outside of Application Catalog. Also, once the RowID of an item in the Application Catalog is known, you can use other AdminStudio PowerShell Cmdlets cmdlets to perform actions on that item.

Example

The following is an example of the Get-ASCatalogItem cmdlet:

Get-ASCatalogItem-ItemType 'Group'-ItemId 1

Parameters

The Get-ASCatalogItem cmdlet has the following parameters:

Get-ASCatalogItem Parameters

Parameter

Description

-ItemType

Specify one of the following types to identify which type of catalog item you want to list the contents of, in single quote marks:

Group 
Application 
Package 

For example:

Get-ASCatalogItem-ItemType 'Group'-ItemId 10

-ItemId

Use to specify the ID number of the group, application or package that you want to list the contents of. For example:

Get-ASCatalogItem-ItemType 'Group'-ItemId 10

Sample Script

Below is a sample script that uses the Get-ASCatalogItem cmdlet. If you use option 11 in this script, the entire package tree will be returned.

###############################################################

# Input required from users

###############################################################

$DefaultExt         =  @('*.msi','*.sft')

$TestsToEnable      =  @('0001','0002','0003','0004','0005','0007','0008','0009','0012','0014', '0021','0023','0029','0030','0035','0038','0039','0044')

$TestsToDisable     =  @('0501','0502','0503','0504','0505','0506','0507','0508','0509', '0510', '0511','0512','0513','0514','0515','0516','0517','0519','0520','0521','0522','0523','0524','0525','0526','0527','0528','0529','0530','0531','0533','0534','0535','0537','0538','0539','0540','0541','0542','0543','0544','0545','0546','0547','0548','0549','0550','0551','0552','0553','0401','0402','0403','0404','0405','0406','0407','0408','0409','0410','0411','0412','0413','0414','0415','0416','0417','0419','0420','0421','0422','0423','0424','0425','0426','0427','0428','0429','0430','0435','0437','0438','0440','0441','0443','0444','0445','0446','0447','0448','0449','0450','0439','0442','0451','0452','0453','0454','0301','0302','0303','0304','0305','0306','0307','0308','0309','0310','0311','0312','0313','0314','0315','0316','0318','0319','0320','0321','0322','0323','0324','0325','0326','0327','0328','0329','0330','0335','0338','0340','0341','0343','0344','0345','0346','0347','0348','0349','0350','0339','0342','0352','0353','0354','0201','0202','0203','0204','0205','0206','0207','0208','0209','0210','0211','0212','0213','0214','0215','0216','0217','0219','0220','0221','0222','0223','0224','0225','0226','0227','0228','0229','0230','0235','0237','0238','0244','0245','0246','0247','0248','0249','0250','0239','0251','0252','0253','0101','0102','0103','0104','0105','0106','0107','0108','0109','0110','0111','0112','0113','0114','0115','0116','0117','0119','0120','0121','0122','0123','0124','0125','0126','0127','0128','0129','0130','0131','0133','0134','0135','0137','0138','0139','0144','0145','0146','0147','0148','0149','0150','0151','0152','0153','0001','0002','0003','0004','0005','0006','0007','0008','0009','0010','0011','0012','0013','0014','0015','0016','0018','0019','0020','0021','0022','0023','0024','0025','0026','0027','0028','0029','0030','0035','0038','0039','0044','0045','0046','0047','0048','0049','0050','0052','0053','ICE01','ICE02','ICE03','ICE04','ICE05','ICE06','ICE07','ICE08','ICE09','ICE10','ICE12','ICE13','ICE14','ICE15','ICE16','ICE17','ICE18','ICE19','ICE20','ICE21','ICE22','ICE23','ICE24','ICE25','ICE26','ICE27','ICE28','ICE29','ICE30','ICE31','ICE32','ICE33','ICE34','ICE35','ICE36','ICE38','ICE39','ICE40','ICE41','ICE42','ICE43','ICE44','ICE45','ICE46','ICE47','ICE48','ICE49','ICE50','ICE51','ICE52','ICE53','ICE54','ICE55','ICE56','ICE57','ICE58','ICE59','ICE60','ICE61','ICE62','ICE63','ICE64','ICE65','ICE66','ICE67','ICE68','ICE69','ICE70','ICE71','ICE72','ICE73','ICE74','ICE75','ICE76','ICE77','ICE78','ICE79','ICE80','ICE81','ICE82','ICE83','ICE84','ICE85','ICE86','ICE87','ICE88','ICE89','ICE90','ICE91','ICE92','ICE93','ICE94','ICE95','ICE96','ICE97','ICE98','ICE99','ICE100','ICE101','ICE102','ICE103','ICE104','ICE105')

$folder             = "C:\code\demo3\MSIPackage"

$global:CatalogName = 'MyNewCatalog'

$ConnectionString   = 'PROVIDER=SQLOLEDB.1;Data Source=localhost;Initial Catalog=' + $global:CatalogName + ';Integrated Security=SSPI;'

$SCCMTargetGroup    = "Applications"

$sAACProjectFile    = "c:\code\script\AACText.aacx"

 

###############################################################

# Non-User Settings

###############################################################

$shive              = "HKLM:\SOFTWARE\Wow6432Node\InstallShield\AdminStudio\15.0\"

$slocation          = "Product Location"

$sAsLoc             = (Get-ItemProperty $shive $slocation).$slocation

$sCurrentLoc        = [Environment]::CurrentDirectory=(Get-Location-PSProvider FileSystem).ProviderPath

$sAsLoc             = $sAsLoc + "Common\"

$global:oPkgArray   = @()

$global:oPkgArrayError = @()

$global:oPkgArrayPass = @()

$global:oPkgArrayFail = @()

 

###############################################################

# Functions

###############################################################

function Import ($s)

{

    $f = [System.IO.File]::GetAttributes($s)

    $d = ($f -band [System.IO.FileAttributes]::Directory)

    if (!$d)

    {

        Write-Host 'Importing:' $s-foregroundcolor white

        $obj = Invoke-ASImportPackage-PackagePath $s

        if ($obj.GetType().FullName-eq 'AdminStudio.Platform.Helpers.PackageHelper')

        {

            $global:oPkgArray = $global:oPkgArray + $obj

        }

        else

        {

            Write-Host 'Failured to import:' $s-foregroundcolor red

            $global:oPkgArrayError = $global:oPkgArrayError + $obj

        }

    }

}

 

function ImportFolder ()

{

    [String] $InputFolder = Read-Host "Enter folder to import from (Blank for default)"

    

    if ($InputFolder)

    {

        $folder = $InputFolder

    }

    

    if ($folder)

    {

        Write-Host 'Importing Applications from' $folder-foregroundcolor yellow

        foreach ($file in Get-Childitem-include $DefaultExt-Recurse $folder)

        {

            Import ($file)

        }

        Write-Host 'Packages that Import Succeeded:' $global:oPkgArray.Count

        Write-Host 'Packages that Import Failed:' $global:oPkgArrayError.Count

    }

}

 

function LoadDLL ($s)

{

    $FileName = $sAsLoc + $s

    import-module-name $FileName

}

 

function PrepAS ()

{    

    LoadDLL 'AdminStudio.Platform.PowerShellExtensions.dll'

    LoadDLL 'AdminStudio.Utilities.dll'

    LoadDLL 'AdminStudio.SCCM.Model.dll'

    Set-ASConfigPlatform-ConnectionString   $ConnectionString

}

 

function Write-Host-Indent ()

{

    Write-Host '                 '-nonewline

}

 

function Write-Host-Drawline ()

{

    Write-Host '**************************************'-foregroundcolor yellow

}

 

function Write-Heading ($s)

{

    Write-Host-Drawline

    Write-Host $s

    Write-Host-Drawline

}

 

function Write-Host-Timestamp ()

{

    $tEnd = Get-Date

    $tDiff = $tEnd - $tBegin

    #Write-Host 'End:' $tEnd-foregroundcolor gray

    Write-Host 'Total Time:' $tDiff.Hours' hours' $tDiff.Minutes' minutes ' $tDiff.Seconds 'seconds'

}

 

function Write-ShorterName ($s)

{

    $s=$s.Replace("The Windows Installer database is scanned for ", "")

    Write-Host ' '-nonewline

    if ($s.Length -gt 55)

    {

          Write-Host $s.Substring(0,55)-foregroundcolor white

    }

    else

    {

          Write-Host $s-foregroundcolor white

    }

}

 

function WriteVirtReadiness ($Text)

{

    Write-Host-Indent

    Write-Host-Indent

    Write-Host 'Blocker:'$Text-foregroundcolor white

}

 

function DisplayVirtReadiness ($Package)

{

    $VirtResult = Get-ASVirtualReadiness-PackagePath $Package.FileName-PackageId $Package.RowID

    if ($VirtResult-band 32)

    {

        WriteVirtReadiness("ClickOnce")

    }

    if ($VirtResult-band 64)

    {

        WriteVirtReadiness("Shell Extension")

    }

    if ($VirtResult-band 128)

    {

        WriteVirtReadiness("OS Integrated")

    }

    if ($VirtResult-band 256)

    {

        WriteVirtReadiness("Boot Service")

    }

    if ($VirtResult-band 512)

    {

        WriteVirtReadiness("Too Large")

    }

    if ($VirtResult-band 1024)

    {

        WriteVirtReadiness("Surrogate DLL")

    }

    if ($VirtResult-band 2048)

    {

        WriteVirtReadiness("COM Plus")

    }

    if ($VirtResult-band 4096)

    {

        WriteVirtReadiness("Device Driver")

    }

    if ($VirtResult-band 8192)

    {

        WriteVirtReadiness("Questionable")

    }

    if ($VirtResult-band 16384)

    {

        WriteVirtReadiness("Unsuitable")

    }

    if ($VirtResult-band 32768)

    {

        WriteVirtReadiness("64-Bit Package")

    }

    if ($VirtResult-band 65536)

    {

        WriteVirtReadiness("ASP.NET/IIS Application")

    }

    if ($VirtResult-band 131072)

    {

        WriteVirtReadiness("WMI Provider")

    }

    if ($VirtResult-band 262144)

    {

        WriteVirtReadiness("J2EE Application Server")

    }

    if ($VirtResult-band 524288)

    {

        WriteVirtReadiness("Unsupported Applicationr")

    }

    if ($VirtResult-band 1048576)

    {

        WriteVirtReadiness("Unsupported Application")

    }

    if ($VirtResult-band 2097152)

    {

        WriteVirtReadiness("URL Protocol")

    }

    if ($VirtResult-band 4194304)

    {

        WriteVirtReadiness("Default Program")

    }

}

 

function Test ($o)

{

    Write-Host 'Testing Package:' $o.DisplayedProductName-nonewline-foregroundcolor white

    Write-Host ' RowId:' $o.RowID-foregroundcolor gray

    $oTestResults = Test-ASPackage-PackageId $o.RowID

    $errors = 0;

    $warn = 0;

    foreach ($oTestResult in $oTestResults.Stats)

    {

          $errors =  $errors + $oTestResult.Errors

          $warn   =  $warn +   $oTestResult.Warnings  

    }

    Write-Host-Indent

    Write-Host 'Errors:' $errors-foregroundcolor red

    Write-Host-Indent

    Write-Host 'Warnings:' $warn-foregroundcolor yellow

    if ($errors -eq 0)

    {

        Write-Host-Indent

        Write-Host 'Virtualization Readiness:'

        $global:oPkgArrayPass = $global:oPkgArrayPass + $o

        DisplayVirtReadiness ($o)

    }

    else

    {

        $global:oPkgArrayFail = $global:oPkgArrayFail + $obj

    }

}

 

function TestImportedPackages ($Array)

{  

    $global:oPkgArrayPass = @()

    $global:oPkgArrayFail = @()

    foreach ($oPkg in $Array)

    {

       Test ($oPkg);

    }

}

 

function ConvertToAppV5 ($o)

{

    $ext = $o.FileName.Substring($o.FileName.Length - 3,3)

    $ext = $ext.ToLower()

    if ($ext -eq 'sft')

    {

        Write-Host 'Converting Package:' $o.DisplayedProductName-nonewline-foregroundcolor white

        Write-Host ' RowId:' $o.RowID-foregroundcolor gray

        $oPackage = Invoke-ASConvertPackageEx-PackagePath $o.FileName-BuildAppV

        $oPackage

    }

    else

    {

        Write-Host 'Skipping non SFT Package:' $o.DisplayedProductName-foregroundcolor gray

    }

}

 

function ConvertApp5ImportedPackages ($Array)

{  

    foreach ($oPkg in $Array)

    {

       ConvertToAppV5 ($oPkg);

    }

}

 

function ConvertMSIToAppV5 ($o)

{

    $ext = $o.FileName.Substring($o.FileName.Length - 3,3)

    $ext = $ext.ToLower()

    if ($ext -eq 'msi')

    {

        Write-Host 'Converting Package:' $o.DisplayedProductName-nonewline-foregroundcolor white

        Write-Host ' RowId:' $o.RowID-foregroundcolor gray

        Invoke-ASConvertPackageEx-PackagePath $o.FileName-BuildAppV-BuildSymantec

        $oPackage

    }

    else

    {

        Write-Host 'Skipping non MSI Package:' $o.DisplayedProductName-foregroundcolor gray

    }

}

 

function ConvertApp5FomMSIImportedPackages($Array)

{  

    Set-ASConfigPlatform-AACSettingsFile $sAACProjectFile

    foreach ($oPkg in $Array)

    {

       ConvertMSIToAppV5 ($oPkg);

    }

}

 

function CreateNewCatalog ()

{

    $global:oPkgArray   = @()

    [String] $global:CatalogName = Read-Host "Enter New Catalog Name (Blank to default)"

 

    ###############################################################

    # Create Catalog

    ###############################################################

    if ($global:CatalogName)

    {

        Write-Host 'Creating New Catalog' $global:CatalogName-foregroundcolor yellow

        New-ASCatalog-CatalogName $global:CatalogName

        Write-Host

    }

}

 

function DisableAllTests ()

{

    Write-Host 'Disabling All Tests...'

    foreach ($Test in $TestsToDisable)

    {

       $TestDetails = Get-ASTestDetails-TestId $Test

       if ($TestDetails)

       {

            # Write-Host 'Disabling Test:' $Test -nonewline -foregroundcolor yellow

            # Write-ShorterName ($TestDetails.TestBriefDescription)

            $State = Set-ASTestState-TestId $Test-TestState 0

       }

    }

}

 

function EnableSelectedTests ()

{

    foreach ($Test in $TestsToEnable)

    {

       $TestDetails = Get-ASTestDetails-TestId $Test

       if ($TestDetails)

       {

            Write-Host 'Enabling Test:' $Test-nonewline-foregroundcolor yellow

            Write-ShorterName ($TestDetails.TestBriefDescription)

            $State = Set-ASTestState-TestId $Test-TestState 1

       }

    }

}

 

function OutputPackages ($Array)

{

    if ($Array.Count -gt 0)

    {

        foreach ($oPkg in $Array)

        {

            $oPkg.FileName

        }

    }

    else

    {

         Write-Host 'Empty List'

    }

}

 

function DisplayPackages([int] $LevelPack, [array] $Packages)

{

   for ($i=0; $i -lt $LevelPack; $i++)

   {

       Write-Host  '      '  -nonewline

   }

 

    foreach ($Package in $Packages)

    {

          Write-Host  '      -  ' -nonewline-foregroundcolor Yellow

          Write-Host  $Package.ProductName-nonewline-foregroundcolor white

          Write-Host  ' '-nonewline

          Write-Host  $Package.ProductVersion-nonewline-foregroundcolor yellow

          Write-Host  ' '-nonewline

          Write-Host  '[Type=' $Package.Flags ']'  -foregroundcolor blue-nonewline

          Write-Host  ' '-nonewline

          Write-Host  '[RowId=' $Package.RowId ']'  -foregroundcolor gray

    }

}

 

function DisplayApplications([int]$LevelApp, [array] $Applications)

{

    foreach ($App in $Applications)

    {

          DisplayPackages $LevelApp (Get-ASCatalogItem-ItemId $App.RowId -ItemType 'Package')

    }

}

 

function DisplayApplicationGroups ([int]$Level, [array] $Group)

{

    foreach ($item in $Group)

    {

       for ($i=0; $i -lt $Level; $i++)

       {

           Write-Host  '      '  -nonewline

       }

    

       if ($item.Description-eq 'Application Group')

       {

          Write-Host  '   +  '-nonewline-foregroundcolor Yellow

          Write-Host  $item.GroupName-nonewline-foregroundcolor white

          Write-Host  ' '-nonewline

          Write-Host  '[RowId=' $item.RowId ']' -foregroundcolor gray

          DisplayApplications $Level (Get-ASCatalogItem-ItemId $item.RowId-ItemType 'Application')

        }

        else

        {

          Write-Host  '   +  '-nonewline-foregroundcolor Yellow

          Write-Host  $item.GroupName-foregroundcolor gray-nonewline

          Write-Host  ' ' -nonewline

          Write-Host  '[RowId=' $item.RowId ']'  -foregroundcolor gray

          DisplayApplicationGroups ($Level + 1) (Get-ASCatalogItem-ItemId $item.RowId-ItemType 'Group')

        }

    }

}

 

function DisplayPackageTree ()

{

    Write-Host  '+  Applications'

    DisplayApplicationGroups 0  (Get-ASCatalogItem-ItemId 1-ItemType 'Group')

}

 

function Menu ()

{

    do

    {

      Write-Host

      Write-Host-Drawline

      Write-Host 'Catalog Name:' $global:CatalogName-foregroundcolor white

      Write-Host-Drawline

      Write-Host '1. Create a Catalog'-foregroundcolor white

      Write-Host '2. Import from a folder'-foregroundcolor white

      Write-Host '3. Enable Only Industry Standard Windows 7 32 bit Tests'-foregroundcolor white

      Write-Host '4. Test imported packages'-foregroundcolor white

      Write-Host '5. List packages with 0 Errors '-foregroundcolor white

      Write-Host '6. List packages with more than 0 Errors '-foregroundcolor white

      Write-Host '7. List all imported packages'-foregroundcolor white

      Write-Host '8. Convert ALL Imported AppV4 Packages to AppV5'-foregroundcolor white

      Write-Host '9. Convert ALL Imported MSI Packages to AppV5'-foregroundcolor white

      Write-Host '10. Convert packages with 0 Errors Imported MSI Packages to AppV5'-foregroundcolor white

      Write-Host '11. Display Package Tree'-foregroundcolor white

      Write-Host

      Write-Host '0. Exit'-foregroundcolor white

      Write-Host

      [String] $menu = Read-Host "Enter Option"

      $tBegin = Get-Date

      if ($menu-eq '1')

      {

          CreateNewCatalog

      }

      elseif ($menu-eq '2')

      {

          ImportFolder

      }

      elseif ($menu-eq '3')

      {

          DisableAllTests

          EnableSelectedTests

      }

      elseif ($menu-eq '4')

      {

          TestImportedPackages ($global:oPkgArray)

      }

      elseif ($menu-eq '5')

      {

          Write-Heading 'Applications ready for Windows 7:'

          OutputPackages ($global:oPkgArrayPass)

      }

      elseif ($menu-eq '6')

      {

          Write-Heading 'Applications NOT ready for Windows 7:'

          OutputPackages ($global:oPkgArrayFail)

      }

      elseif ($menu-eq '7')

      {

          Write-Heading 'All Packages:'

          OutputPackages ($global:oPkgArray)

      }

      elseif ($menu-eq '8')

      {

          ConvertApp5ImportedPackages($global:oPkgArray)

      }

      elseif ($menu-eq '9')

      {

          ConvertApp5FomMSIImportedPackages ($global:oPkgArray)

      }

      elseif ($menu-eq '10')

      {

          ConvertApp5FomMSIImportedPackages ($global:oPkgArrayPass)

      }

      elseif ($menu-eq '11')

      {

          DisplayPackageTree

      }

      Write-Host-Timestamp

    }

    while ($menu-ne '0')

}

 

################################################################

# Main Loop

###############################################################

cd $sAsLoc

Write-Host-Drawline

Write-Host 'Default Directory =' $folder-foregroundcolor gray

Write-Host 'Default ConnectionString =' $ConnectionString-foregroundcolor gray

Write-Host 'AdminStudio Directory =' $sAsLoc-foregroundcolor gray

Write-Host-Drawline

PrepAS

 

################################################################

# Run Interactively

Menu

 

###############################################################

# You do not need to use the Menu, you could just call:

#

#ImportFolder

#DisableAllTests

#EnableSelectedTests

#TestImportedPackages

#ConvertApp5FomMSIImportedPackages ($global:oPkgArrayPass)

#

#This would:

#  1. Import Folder of packages

#  2. Enable tests I care about

#  3. Test the packages

#  4. Convert any packages with 0 errors convert to App V5 and Symantec SWV

###############################################################

 

 

cd $sCurrentLoc

Notes

In this script, make sure that you define the following parameters correctly:

$global:CatalogName = 'MyNewCatalog' 

$ConnectionString = 'PROVIDER=SQLOLEDB.1;Data Source=localhost;
Initial Catalog=' + $global:CatalogName + ';Integrated Security=SSPI;'

Return Values

A list of the root items of the specified type is returned: Group, Application, or Package.