Get-ASCatalogItem
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:
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:
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.