ASDK and Package Management
I am trying to set up a vbscript to enable packages to specific package servers on demand. I have found the SWDSolnPackageManagementLib.SetPackageExPackageServerOptions Method and it appears to do what I want. I am running into 'type mismatch' errors though.
Can anyone assist?
Here is the function call itself:
result = SetpackageExPackageServerOptions("bff09bbe-cb89-44d1-ab2a-6eafa657dd44",false,"5d07498b-952c-4097-a339-156a4c1c1388")
"bff09bbe-cb89-44d1-ab2a-6eafa657dd44" is the GUID of my 'test' package
"5d07498b-952c-4097-a339-156a4c1c1388" is the GUID of one of my package servers(I have tried comma seperating several of them but same issue..)
Any ideas? Anyone else done this? The above call is very simplified, I have about 10 very large files I am sending out to locations via external hard drives and once the files are put in place on the package servers I would like to trigger a script that turns them on for that server. It is the only 'easy' way I can come up with to get 13 Gigs of files out there over slow links!
Thanks,
Matt
object required?
Well I haven't done much of anything with the SDK yet...but just from basic VBScripting, you need to have some object to call that function, like
Just a suggestion...
Thanks,
Kyle
Symantec Trusted Advisor
If your question has been resolved, please be sure to click "Mark as Solution"! Thank you.
ASDK docs
I went out and got the ASDK and looked at the CHM file a bit and found this:
[VBS] set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib") packageManagement.TargetServer = "localhost" packageManagement.UserName = "username" packageManagement.Password = "password" packageManagement.DomainName = "domain" packageManagement.Authenticate() result = packageManagement.SetPackageExPackageServerOptions( packageObject.Guid, true, PackageServerGuids, "C:\Program Files\Altiris\Altiris Agent\Package Server Agent")Thanks,
Kyle
Symantec Trusted Advisor
If your question has been resolved, please be sure to click "Mark as Solution"! Thank you.
I guess I should have
I guess I should have included my full script instead of the snippet that I did. Here is what I have at this point, followed by the output.
Dim CRLF
Dim strGuid
Dim strPackageServerList,strNewPackageServer,strNewPackageServerList
Dim result
CRLF = CHR( 13 ) & CHR( 10 ) 'Carrage Return Line Feed
'create a package management Object
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
strGuid = "bff09bbe-cb89-44d1-ab2a-6eafa657dd44"
'Wscript.Echo "SWDSolnPackageManagementLib"
set packageObject = packageManagement.GetPackageExByGuid(strGuid)
wscript.Echo "packageObject Item Details" & CRLF _
& " packageObject.AgentDisplayDescription=" & packageObject.AgentDisplayDescription & CRLF _
& " packageObject.AgentDisplayName=" & packageObject.AgentDisplayName & CRLF _
& " packageObject.AlternateDownloadDestinationLocation=" & packageObject.AlternateDownloadDestinationLocation & CRLF _
& " packageObject.Attributes=" & packageObject.Attributes & CRLF _
& " packageObject.EnableVerboseEvents=" & packageObject.EnableVerboseEvents & CRLF _
& " packageObject.Description=" & packageObject.Description & CRLF _
& " packageObject.PackageDirectory=" & packageObject.PackageDirectory & CRLF _
& " packageObject.Language=" & packageObject.Language & CRLF _
& " packageObject.Location=" & packageObject.Location & CRLF _
& " packageObject.Name=" & packageObject.Name & CRLF _
& " packageObject.Publisher=" & packageObject.Publisher & CRLF _
& " packageObject.PackageSourceType=" & packageObject.PackageSourceType & CRLF _
& " packageObject.PackageType=" & packageObject.PackageType & CRLF _
& " packageObject.Version=" & packageObject.Version & CRLF _
& " packageObject.PurgeAfterDurationInMinutes=" & packageObject.PurgeAfterDurationInMinutes & CRLF _
& " packageObject.SelectedPackageServers=" & packageObject.SelectedPackageServers & CRLF _
& " packageObject.Guid=" & packageObject.Guid & CRLF _
& " packageObject.ParentFolderGuid=" & packageObject.ParentFolderGuid & CRLF
strPackageServerList = packageObject.SelectedPackageServers
wscript.echo "Current List: " & strPackageServerList
strNewPackageServer = "5d07498b-952c-4097-a339-156a4c1c1388"
strNewPackageServerList = strPackageServerList & "," & strNewPackageServer
wscript.echo "New List: " & strNewPackageServerList
result = SetpackageExPackageServerOptions(strGuid,0,strNewPackageServerList)
'result = SetpackageExPackageServerOptions(strGuid,0,strNewPackageServer)
set packageObject = packageManagement.GetPackageExByGuid(strGuid)
''''''''''''''''''''''''''''''''''''''''
' Run through the package Object details
''''''''''''''''''''''''''''''''''''''''
wscript.Echo "packageObject Item Details" & CRLF _
& " packageObject.AgentDisplayDescription=" & packageObject.AgentDisplayDescription & CRLF _
& " packageObject.AgentDisplayName=" & packageObject.AgentDisplayName & CRLF _
& " packageObject.AlternateDownloadDestinationLocation=" & packageObject.AlternateDownloadDestinationLocation & CRLF _
& " packageObject.Attributes=" & packageObject.Attributes & CRLF _
& " packageObject.EnableVerboseEvents=" & packageObject.EnableVerboseEvents & CRLF _
& " packageObject.Description=" & packageObject.Description & CRLF _
& " packageObject.PackageDirectory=" & packageObject.PackageDirectory & CRLF _
& " packageObject.Language=" & packageObject.Language & CRLF _
& " packageObject.Location=" & packageObject.Location & CRLF _
& " packageObject.Name=" & packageObject.Name & CRLF _
& " packageObject.Publisher=" & packageObject.Publisher & CRLF _
& " packageObject.PackageSourceType=" & packageObject.PackageSourceType & CRLF _
& " packageObject.PackageType=" & packageObject.PackageType & CRLF _
& " packageObject.Version=" & packageObject.Version & CRLF _
& " packageObject.PurgeAfterDurationInMinutes=" & packageObject.PurgeAfterDurationInMinutes & CRLF _
& " packageObject.SelectedPackageServers=" & packageObject.SelectedPackageServers & CRLF _
& " packageObject.Guid=" & packageObject.Guid & CRLF _
& " packageObject.ParentFolderGuid=" & packageObject.ParentFolderGuid & CRLF
OUTPUT:
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
packageObject Item Details
packageObject.AgentDisplayDescription=
packageObject.AgentDisplayName=
packageObject.AlternateDownloadDestinationLocation=
packageObject.Attributes=Normal
packageObject.EnableVerboseEvents=False
packageObject.Description=
packageObject.PackageDirectory=
packageObject.Language=
packageObject.Location=e:\gold\tools
packageObject.Name=_test package
packageObject.Publisher=
packageObject.PackageSourceType=Local
packageObject.PackageType=Win32
packageObject.Version=1.0
packageObject.PurgeAfterDurationInMinutes=10080
packageObject.SelectedPackageServers=f1091268-aec4-4bb4-8352-ad905b88d896
packageObject.Guid=bff09bbe-cb89-44d1-ab2a-6eafa657dd44
packageObject.ParentFolderGuid=18aa08d8-c2eb-4407-a7e6-f3ad9946d0db
Current List: f1091268-aec4-4bb4-8352-ad905b88d896
New List: f1091268-aec4-4bb4-8352-ad905b88d896,5d07498b-952c-4097-a339-156a4c1c1388
Then I get this error:
E:\hold\package.vbs(49, 1) Microsoft VBScript runtime error: Type mismatch: 'SetpackageExPackageServerOptions'
So it authenticates fine, shows the data I want and then fails when I attempt to modify it.
Any other ideas?
Matt
I have to go back to my
I have to go back to my original post; you're calling the function like this:
Since SetPackageExPackageServerOptions isn't a built-in function in VBScript/WSH, you need to provide the object name first, i.e.:
See what I mean? Just like when you call :
Thanks,
Kyle
Symantec Trusted Advisor
If your question has been resolved, please be sure to click "Mark as Solution"! Thank you.
Still No Go
I still can't make this work. I am getting the following output from my script(I will paste the script after the output...I did modify my script to make it easier to follow):
E:\hold>cscript package.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
***Calling Sub to Display Package Info***
packageObject Item Details
packageObject.AgentDisplayDescription=
packageObject.AgentDisplayName=
packageObject.AlternateDownloadDestinationLocation=
packageObject.Attributes=Normal
packageObject.EnableVerboseEvents=False
packageObject.Description=
packageObject.PackageDirectory=
packageObject.Language=
packageObject.Location=e:\gold\tools
packageObject.Name=_test package
packageObject.Publisher=
packageObject.PackageSourceType=Local
packageObject.PackageType=Win32
packageObject.Version=1.0
packageObject.PurgeAfterDurationInMinutes=10080
packageObject.SelectedPackageServers=f1091268-aec4-4bb4-8352-ad905b88d896
packageObject.Guid=bff09bbe-cb89-44d1-ab2a-6eafa657dd44
packageObject.ParentFolderGuid=18aa08d8-c2eb-4407-a7e6-f3ad9946d0db
***Calling Sub to get Package Server list***
Current List: f1091268-aec4-4bb4-8352-ad905b88d896
New List: f1091268-aec4-4bb4-8352-ad905b88d896,5d07498b-952c-4097-a339-156a4c1c1
388
***Calling Function to modify package server list***
E:\hold\package.vbs(44, 5) Microsoft VBScript runtime error: Invalid procedure c
all or argument: 'PackageManagement.SetPackageExPackageServerOptions'
SCRIPT:
'vbscript function the add a package server to the list of package servers for a package
option explicit
Dim strGuid
Dim strPackageServerList,strNewPackageServer,strNewPackageServerList
Dim result
strGuid = "bff09bbe-cb89-44d1-ab2a-6eafa657dd44"
'Call sub to display object info for strGuid
wscript.echo "***Calling Sub to Display Package Info***"
DisplayObjectInfo(strGuid)
'call function to get current package server list from object
wscript.echo "***Calling Sub to get Package Server list***"
strPackageServerList = GetCurrentPackageServerlist(strGuid)
wscript.echo "Current List: " & strPackageServerList
'package server to add to list - this will be changed to another sub at a later point
strNewPackageServer = "5d07498b-952c-4097-a339-156a4c1c1388"
'add the new package server to the comma seperated string of package servers to make the new list
strNewPackageServerList = strPackageServerList & "," & strNewPackageServer
wscript.echo "New List: " & strNewPackageServerList
'call function to set new package server list
wscript.echo "***Calling Function to modify package server list***"
result = ModifyPackageServerList(strGuid,strNewPackageServerList)
wscript.echo "Result of Function to modify package server list:" & result
'display the object info for strGuid again
wscript.echo "***Calling Sub to Display Package Info***"
DisplayObjectInfo(strGuid)
wscript.echo "Current List: " & strPackageServerList
Function ModifyPackageServerList(strGuid,strNewPackageServerList)
'Function to modify the package server list for package 'strguid'
Dim PackageManagement
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
'write the new list to the package
ModifyPackageServerList = PackageManagement.SetPackageExPackageServerOptions(strGuid, false, strNewPackageServerList)
End Function
Function GetCurrentPackageServerList(strGuid)
'get the current package server list for the package with the provided guid and return it.
Dim PackageObject,PackageManagement
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
set packageObject = packageManagement.GetPackageExbyGuid(strGuid)
GetCurrentPackageServerList = packageObject.SelectedPackageServers
End Function
sub DisplayObjectInfo(strGuid)
Dim CRLF,PackageObject,PackageManagement
CRLF = CHR( 13 ) & CHR( 10 ) 'Carrage Return Line Feed
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
'Display all infor for package with guid strguid
set packageObject = packageManagement.GetPackageExByGuid(strGuid)
''''''''''''''''''''''''''''''''''''''''
' Run through the package Object details
''''''''''''''''''''''''''''''''''''''''
wscript.Echo "packageObject Item Details" & CRLF _
& " packageObject.AgentDisplayDescription=" & packageObject.AgentDisplayDescription & CRLF _
& " packageObject.AgentDisplayName=" & packageObject.AgentDisplayName & CRLF _
& " packageObject.AlternateDownloadDestinationLocation=" & packageObject.AlternateDownloadDestinationLocation & CRLF _
& " packageObject.Attributes=" & packageObject.Attributes & CRLF _
& " packageObject.EnableVerboseEvents=" & packageObject.EnableVerboseEvents & CRLF _
& " packageObject.Description=" & packageObject.Description & CRLF _
& " packageObject.PackageDirectory=" & packageObject.PackageDirectory & CRLF _
& " packageObject.Language=" & packageObject.Language & CRLF _
& " packageObject.Location=" & packageObject.Location & CRLF _
& " packageObject.Name=" & packageObject.Name & CRLF _
& " packageObject.Publisher=" & packageObject.Publisher & CRLF _
& " packageObject.PackageSourceType=" & packageObject.PackageSourceType & CRLF _
& " packageObject.PackageType=" & packageObject.PackageType & CRLF _
& " packageObject.Version=" & packageObject.Version & CRLF _
& " packageObject.PurgeAfterDurationInMinutes=" & packageObject.PurgeAfterDurationInMinutes & CRLF _
& " packageObject.SelectedPackageServers=" & packageObject.SelectedPackageServers & CRLF _
& " packageObject.Guid=" & packageObject.Guid & CRLF _
& " packageObject.ParentFolderGuid=" & packageObject.ParentFolderGuid & CRLF
End Sub
Package Server Location
Looks to me like you are leaving out the location on the package server:
This:
ModifyPackageServerList = PackageManagement.SetPackageExPackageServerOptions(strGuid, false, strNewPackageServerList)
Should be something like this:
ModifyPackageServerList = PackageManagement.SetPackageExPackageServerOptions(strGuid,false,strNewPackageServerList, "C:\Program Files\Altiris\Altiris Agent\Package Server Agent")
From the help doc of the ASDK:
public bool SetPackageExPackageServerOptions(
string sPackageGuid,
bool bAllOrSpecificPackageServers,
string sPackageServerGuids,
string sLocationOnPackageServer
);
In the past, I have also specified my ServerString as an array string and passed it in instead of a comma separated list
Yeah I saw that in the SDK
Yeah I saw that in the SDK docs, but it wasn't clear on whether it was a required parameter or not...apparently it is! I guess you could just pass an empty string "" to make it use the default destination (Altiris Agent\Package Delivery\{GUID}\cache).
Thanks,
Kyle
Symantec Trusted Advisor
If your question has been resolved, please be sure to click "Mark as Solution"! Thank you.
Awesome, works great. I
Awesome, works great. I added a function to grab the current package directory and then write it back in the method. I had assumed that was not required...that will teach me. Here is the final product in case someone else likes this idea. I will be making it into a script that prompts for package server name and then adds that package server's guid to the list of package servers that contain the package!
Thanks again, I do appreciate it!
Matt
OUTPUT:
E:\hold>cscript package.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
***Calling Sub to Display Package Info***
packageObject Item Details
packageObject.AgentDisplayDescription=
packageObject.AgentDisplayName=
packageObject.AlternateDownloadDestinationLocation=
packageObject.Attributes=Normal
packageObject.EnableVerboseEvents=False
packageObject.Description=
packageObject.PackageDirectory=
packageObject.Language=
packageObject.Location=e:\gold\tools
packageObject.Name=_test package
packageObject.Publisher=
packageObject.PackageSourceType=Local
packageObject.PackageType=Win32
packageObject.Version=1.0
packageObject.PurgeAfterDurationInMinutes=10080
packageObject.SelectedPackageServers=5d07498b-952c-4097-a339-156a4c1c1388,f1091
268-aec4-4bb4-8352-ad905b88d896
packageObject.Guid=bff09bbe-cb89-44d1-ab2a-6eafa657dd44
packageObject.ParentFolderGuid=18aa08d8-c2eb-4407-a7e6-f3ad9946d0db
***Calling Sub to get Package Server list***
Current List: 5d07498b-952c-4097-a339-156a4c1c1388,f1091268-aec4-4bb4-8352-ad905
b88d896
New List: 5d07498b-952c-4097-a339-156a4c1c1388,f1091268-aec4-4bb4-8352-ad905b88d
896,5d07498b-952c-4097-a339-156a4c1c1388
***Calling function to get the current package directory***
Current Package Directory:
***Calling Function to modify package server list***
Result of Function to modify package server list:True
***Calling Sub to Display Package Info***
packageObject Item Details
packageObject.AgentDisplayDescription=
packageObject.AgentDisplayName=
packageObject.AlternateDownloadDestinationLocation=
packageObject.Attributes=Normal
packageObject.EnableVerboseEvents=False
packageObject.Description=
packageObject.PackageDirectory=
packageObject.Language=
packageObject.Location=e:\gold\tools
packageObject.Name=_test package
packageObject.Publisher=
packageObject.PackageSourceType=Local
packageObject.PackageType=Win32
packageObject.Version=1.0
packageObject.PurgeAfterDurationInMinutes=10080
packageObject.SelectedPackageServers=5d07498b-952c-4097-a339-156a4c1c1388,f1091
268-aec4-4bb4-8352-ad905b88d896
packageObject.Guid=bff09bbe-cb89-44d1-ab2a-6eafa657dd44
packageObject.ParentFolderGuid=18aa08d8-c2eb-4407-a7e6-f3ad9946d0db
Current List: 5d07498b-952c-4097-a339-156a4c1c1388,f1091268-aec4-4bb4-8352-ad905
b88d896
E:\hold>
SCRIPT:
'vbscript function the add a package server to the list of package servers for a package
option explicit
Dim strGuid
Dim strPackageServerList,strNewPackageServer,strNewPackageServerList
Dim result
Dim strPackageDirectory
strGuid = "bff09bbe-cb89-44d1-ab2a-6eafa657dd44"
'Call sub to display object info for strGuid
wscript.echo "***Calling Sub to Display Package Info***"
DisplayObjectInfo(strGuid)
wscript.echo ""
'call function to get current package server list from object
wscript.echo "***Calling Sub to get Package Server list***"
strPackageServerList = GetCurrentPackageServerlist(strGuid)
wscript.echo "Current List: " & strPackageServerList
'package server to add to list - this will be changed to another sub at a later point
strNewPackageServer = "5d07498b-952c-4097-a339-156a4c1c1388"
'add the new package server to the comma seperated string of package servers to make the new list
strNewPackageServerList = strPackageServerList & "," & strNewPackageServer
wscript.echo "New List: " & strNewPackageServerList
wscript.echo ""
'call function to get the current package directory
wscript.echo "***Calling function to get the current package directory***"
strPackageDirectory = GetCurrentPackageDirectory(strGuid)
wscript.echo "Current Package Directory: " & strPackageDirectory
wscript.echo ""
'call function to set new package server list
wscript.echo "***Calling Function to modify package server list***"
result = ModifyPackageServerList(strGuid,strNewPackageServerList,strPackageDirectory)
wscript.echo "Result of Function to modify package server list:" & result
wscript.echo ""
'display the object info for strGuid again
wscript.echo "***Calling Sub to Display Package Info***"
DisplayObjectInfo(strGuid)
wscript.echo "Current List: " & strPackageServerList
Function ModifyPackageServerList(strGuid,strNewPackageServerList,strPackageDirectory)
'Function to modify the package server list for package 'strguid'
Dim PackageManagement
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
'write the new list to the package
ModifyPackageServerList = PackageManagement.SetPackageExPackageServerOptions(strGuid, false, strNewPackageServerList, strPackageDirectory)
End Function
Function GetCurrentPackageServerList(strGuid)
'get the current package server list for the package with the provided guid and return it.
Dim PackageObject,PackageManagement
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
set packageObject = packageManagement.GetPackageExbyGuid(strGuid)
GetCurrentPackageServerList = packageObject.SelectedPackageServers
End Function
Function GetCurrentPackageDirectory(strGuid)
'Get current Package directory
Dim PackageObject,PackageManagement
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
set packageObject = packageManagement.GetPackageExbyGuid(strGuid)
GetCurrentPackageDirectory = PackageObject.PackageDirectory
End Function
sub DisplayObjectInfo(strGuid)
Dim CRLF,PackageObject,PackageManagement
CRLF = CHR( 13 ) & CHR( 10 ) 'Carrage Return Line Feed
set packageManagement = CreateObject("Altiris.ASDK.NS.SoftwareDelivery.SWDSolnPackageManagementLib")
packageManagement.TargetServer = "localhost"
packageManagement.Authenticate()
'Display all infor for package with guid strguid
set packageObject = packageManagement.GetPackageExByGuid(strGuid)
''''''''''''''''''''''''''''''''''''''''
' Run through the package Object details
''''''''''''''''''''''''''''''''''''''''
wscript.Echo "packageObject Item Details" & CRLF _
& " packageObject.AgentDisplayDescription=" & packageObject.AgentDisplayDescription & CRLF _
& " packageObject.AgentDisplayName=" & packageObject.AgentDisplayName & CRLF _
& " packageObject.AlternateDownloadDestinationLocation=" & packageObject.AlternateDownloadDestinationLocation & CRLF _
& " packageObject.Attributes=" & packageObject.Attributes & CRLF _
& " packageObject.EnableVerboseEvents=" & packageObject.EnableVerboseEvents & CRLF _
& " packageObject.Description=" & packageObject.Description & CRLF _
& " packageObject.PackageDirectory=" & packageObject.PackageDirectory & CRLF _
& " packageObject.Language=" & packageObject.Language & CRLF _
& " packageObject.Location=" & packageObject.Location & CRLF _
& " packageObject.Name=" & packageObject.Name & CRLF _
& " packageObject.Publisher=" & packageObject.Publisher & CRLF _
& " packageObject.PackageSourceType=" & packageObject.PackageSourceType & CRLF _
& " packageObject.PackageType=" & packageObject.PackageType & CRLF _
& " packageObject.Version=" & packageObject.Version & CRLF _
& " packageObject.PurgeAfterDurationInMinutes=" & packageObject.PurgeAfterDurationInMinutes & CRLF _
& " packageObject.SelectedPackageServers=" & packageObject.SelectedPackageServers & CRLF _
& " packageObject.Guid=" & packageObject.Guid & CRLF _
& " packageObject.ParentFolderGuid=" & packageObject.ParentFolderGuid & CRLF
End Sub
Great (team) work everyone
Matt,
Just a suggestion, when you finalize it, I would make this a download so the idea doesn't get lost in the general clutter of the discussions.
Jim
Jim Harings
Technical Solutions Consultant
Xcend Group
http://xcendgroup.com
Would you like to reply?
Login or Register to post your comment.