Jump to content


wmmayms

Established Members
  • Posts

    324
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by wmmayms

  1. This is not possible in with Remote Tools for SCCM 2007. But if you look at SCCM 2012 you are able to share the clipboard. Maybe you can use 2012 Tools on a 2007 agent.. I havent tried this..But it might be worth a try if it´s important to you.
  2. Don´t make any changes to your DHCP. You should ask a communications technician to help you setup an ip helper on the subnet where you have your clients. This IP helper should point to your WDS server.
  3. Have you looked at this site? http://www.appdeploy.com/packages/detail.asp?id=1382
  4. If your on a winXP plattform you could look into the delprof.exe utility. http://www.microsoft.com/downloads/en/details.aspx?FamilyID=901A9B95-6063-4462-8150-360394E98E1E
  5. U cannot use NOT LIKE in that way. If you gonan create such a query you need to use a subselect.
  6. My system folder is also empty on a newly deployed win7 x64 Enterprise. On a win7 x86 Ultimate i have a few dll:s in there. I think there is no need to worry
  7. I use a custom policy. When you create a new policy there is a program automatically created under your "Microsoft Corporation FEP - Policies 1.0". Use this program in your deployment task sequence.
  8. Have you configured an installation account for pushing out the client through sccm console?
  9. Go to this path: "\\<SCCM primary server>\SMS_<Site Code>\Client" and run ccmsetup.exe
  10. Look at this: Reference - Configuration Manager 2007 SQL Views Schema.zip As you can see there is allot of work in specifying a single update list (found in this view: "v_AuthListInfo"). You can start off with this code: SELECT a.Name0, COUNT(distinct b.Title) AS 'Total Patches targeted', COUNT(distinct case when b.LastState not in (107,105,101) then b.Title else NULL end) AS 'Distribution Incomplete' FROM v_R_System a JOIN v_GS_PatchStatusEx b on b.ResourceID=a.ResourceID JOIN v_FullCollectionMembership c on c.ResourceID=a.ResourceID JOIN v_UpdateInfo d on d.CI_UniqueID=b.UniqueUpdateID GROUP BY a.Name0 It will show total patches targeted and total number of incomplete distributions for all patches on all computers at the moment.
  11. I would tick the "Continue on Error" box for the uninstall steps. Then i would also think about how the uninstall process works if the program or any of its dependencies are loaded when you trigger your command. This might make the uninstall process fail. The eventlog is a good place to find this information. If this is the case then maybe you need to run your upgrade while users are logged off. Or you might need to add a step for killing started processes before trying to uninstall. If you decide to do this I strongly recommend an optional advertisement or at least a long countdown time to not upset your customers to much PS: Chrome > Firefox
  12. If you don´t see the icons on the controlpanel then the Configuration Manager Client did not install properly which means that it will not show up as client=yes in the configuration manager console. Check this log under ccmsetup folder in your %windir%\system32 A Common problem when the client is unable to install is WMI problem.
  13. Hm good feedback! I have not had time to test it so much yet, and especially not in international enviroments But we must remember why we use the condition. This is to make it run only on computer which has the software targeted installed. To work around this problem you can simply remove the condition and let the script run on all computers targeted by the advertisement. If the script does not find a productcode for the given upgradecode it will do nothing. And the "c:\MSIUninstallFromUpgradeCode.log" (found locally on the client) will tell you that no productcode was found. I will look into the condition section to see if it is possible to use another condition under these circumstances. cheers!
  14. Hi guys In this guide I will show you how you can dynamically upgrade applications no matter who installed it or from what source MSI package. I will start of by introducing you to MSI UpgradeCode which is similar to the ProductCode but not the same. Normally this code is used by the MSI package to determine if there is an earlier application of the same type installed and in that case upgrade. The ProductCode is the unique key for a specific MSI package. The upgradeCode is the unique key for the specific software (at least if its a serious company who created the MSI installer) Okay! So would it not be great to be able to run this command: msiexec /x <ProductCode> /qn And uninstall any version of the software that you no longer need? If that worked it would be great, but unfortunately you cannot do this. To uninstall a MSI package you need to specify the ProductCode after you /x switch. So what to do? Create a script of course! I created this script: MSIUninstallFromUpgradeCode.vbs 'Written by wmmayms @ WindowsNoob 2010-23/2 On Error Resume Next '==================================== ' Define Logpath '==================================== strLogPath = "c:\MSIUninstallFromUpgradeCode.log" '==================================== ' Check arguments '==================================== Set objArguments = Wscript.Arguments If WScript.Arguments.Count = 1 Then strUpgradeCode = objArguments.Named.Item("Upgradecode") Else Wscript.Echo "Usage: MSIUninstallFromUpgradeCode.vbs /Upgradecode:[upgradecode]" Wscript.Quit End If '==================================== ' Setup Logging '==================================== Set objFSO = CreateObject("Scripting.FileSystemObject") If not objFSO.FileExists(strLogPath) Then Set objOutputFile = objFSO.CreateTextFile(strLogPath) Else Set objOutputFile = objFSO.OpenTextFile(strLogPath, 8) End if objOutputFile.WriteLine "--Script triggerd with the following UpgradeCode: " & strUpgradeCode '==================================== ' Main Script '==================================== Set installer = CreateObject("WindowsInstaller.Installer") For Each prod In installer.ProductsEx("", "", 7) sLocalPkg = prod.InstallProperty("LocalPackage") set oDB = installer.OpenDataBase(sLocalPkg, 0) sQuery = "SELECT `Value` FROM `Property` WHERE `Property` = 'UpgradeCode'" Set oView = oDB.OpenView(sQuery) oView.Execute Set oRecord = oView.Fetch If Not (oRecord is Nothing) Then sUpgradeCode = oRecord.StringData(1) If strUpgradeCode = sUpgradeCode Then set WshShell = CreateObject("wscript.shell") objOutputFile.WriteLine "About to run: msiexec.exe /x" & prod.ProductCode & " /qn" Return = WshShell.Run("msiexec.exe /x" & prod.ProductCode & " /qn", 1, true) If Return <> 0 Then objOutputFile.WriteLine "Uninstall failed. Error Code " & Return objOutputFile.Close Wscript.Quit() Else objOutputFile.WriteLine "Uninstall succeeded" End If End If End If Next '==================================== ' Close Logging '==================================== objOutputFile.WriteLine "--Script has finished, if there is no information between Script Triggerd and Script finished then no package was found." objOutputFile.Close The script works like this: cscript.exe MSIUninstallFromUpgradeCode.vbs /UpgradeCode:<UpgradeCode> Example: cscript.exe MSIUninstallFromUpgradeCode.vbs /UpgradeCode:{529316F8-601C-48AB-BAF6-D9E09938D8D3} The script will log it´s activities to a logfile located here: c:\MSIUninstallFromUpgradeCode.log What it does is that it basically creates a query for the ProductCode based on what UpgradeCode you use as an argument when triggering the script. This makes it possible for us to create a uninstall command based on the UpgradeCode which in my opinion is great! So how do we use this in the best way possible? Upgrade scenarios of course! Here is how: 1. Start by creating a new SCCM package with nothing else but the script i supplied above. Don´t forget to add it to your distribution point. 2. Create another package containing the MSI installers of the software you want to upgrade to. Again, don´t forget the distribution point. 3. Okay, now lets create a new custom task sequence. Give it a good name and then right click on it and choose edit. 4. Let the fun begin! Create two default groups and name them "Uninstall" and "Install" 5. Under Uninstall create a "Run Command Line" Step. Input this command line: XCOPY ".\*.*" %temp% /D /E /C /I /Q /H /R /Y /S And make it run from the package containing your "MSIUninstallFromUpgradeCode.vbs" script 6. Create a new "Run Command Line" Step under uninstall group. Click on the option tab and click "Add Condition". Choose "installed software". Now browse for the MSI software that you want to uninstall. This can be either a new MSI Installer or the original (remember we are doing this based on the UpgradeCode NOT the ProductCode) Don´t forget to mark "Match any version of this product (UpgradeCode only)" 7. Before going back to the properties tab make sure you copy the UpgradeCode. 8. On the properties tab enter the following commandline: cscript.exe MSIUninstallFromUpgradeCode.vbs /UpgradeCode:<UpgradeCode> Replace <UpgradeCode> with the code you just copied from the options tab. Now make the command start running from %temp% by adding that value. Okay this means that the uninstall group is complete in our task sequence! If you followed my example above this will uninstall any version of iTunes on the computer where this task sequence is advertised. This is all good... But we want the newest version to get installed aswell! 1. Under the install groupl create a "Run Command Line" Step. Input this command line: XCOPY ".\*.*" %temp% /D /E /C /I /Q /H /R /Y /S And make it run from the package containing your new software MSI package/packages 2. Create a new "Run Command Line" Step under install group Add the following command: msiexec /i i <MSI Installer> REBOOT="ReallySuppress" /qn And make it run in this folder: %temp% Okay that is it! If you advertise this task sequence it will now uninstall any version and then install the newest version which is currently 10.1.2.17 Without the need of creating different collections based on what software they currently have and different programs for running different commands. This is all you need to do If your software requires many different parts you can do something like this: I hope you guys can find some good use of the info provided here. Feel free to get back to me with thoughts and improvements. Here is the task sequence if you want to import the finished thing example.xml Cheers
  15. Yes it is possible. Just choose another sitecode and make sure you don´t use overlapping boundries. //Marcus
  16. Doing that will require alot of different views. The hard part will be to narrow it down to a single update list. If you wanted a compliance report for all downloaded patches it would be much much easier.
  17. Here you go: Code: SELECT DISTINCT SYS.Netbios_Name0, fcm.SiteCode, OPSYS.Caption0 AS 'Operating System', OPSYS.Version0 AS 'Version', OPSYS.CSDVersion0 AS 'Service Pack Level', CASE WHEN (OPSYS.Caption0 LIKE '%Server%') OR (OPSYS.Version0 < '6.0.6001') OR (OPSYS.Version0 = '6.0.6001' AND OPSYS.CSDVersion0 < 'Service Pack 1') THEN 'FAIL' WHEN OPSYS.Caption0 IS NULL THEN 'UNKNOWN' ELSE 'OK' END AS Status0, ROUND (CONVERT (FLOAT, PROC1.MaxClockSpeed0), -2)/1000 AS 'Processor (GHz)', CASE WHEN PROC1.MaxClockSpeed0 IS NULL THEN 'UNKNOWN' WHEN ROUND (CONVERT (FLOAT, PROC1.MaxClockSpeed0), -2)/1000 < 1 THEN 'FAIL' ELSE 'OK' END AS CpuStatus0, ROUND (ROUND(CONVERT (FLOAT ,MEM.TotalPhysicalMemory0) / 1048576, 2) * 1024, 0) AS C083, CASE WHEN MEM.TotalPhysicalMemory0 IS NULL THEN 'UNKNOWN' WHEN ROUND (ROUND(CONVERT (FLOAT ,MEM.TotalPhysicalMemory0) / 1048576, 2) * 1024, 0) < 1024 THEN 'FAIL' ELSE 'OK' END AS Status0, ROUND (CONVERT (FLOAT, LDISK.FreeSpace0) / 1024, 2) AS FreeSpace0, CASE WHEN LDISK.FreeSpace0 IS NULL THEN 'UNKNOWN' WHEN ROUND (CONVERT (FLOAT, LDISK.FreeSpace0) / 1024, 2) < 16 THEN 'FAIL' ELSE 'OK' END AS Status0, MAX (DA.AdapterRAM0) / 1024 AS AdapterRAM ,MAX (a.System_OU_Name0) AS 'System OU',sys.User_Name0,c.LastHWScan FROM v_FullCollectionMembership fcm JOIN v_R_System SYS on fcm.ResourceID=SYS.ResourceID LEFT OUTER JOIN v_GS_PROCESSOR PROC1 on SYS.ResourceID = PROC1.ResourceID LEFT OUTER JOIN v_GS_X86_PC_MEMORY MEM on SYS.ResourceID = MEM.ResourceID LEFT OUTER JOIN v_GS_OPERATING_SYSTEM OPSYS on SYS.ResourceID = OPSYS.ResourceID LEFT OUTER JOIN v_GS_LOGICAL_DISK LDISK on SYS.ResourceID = LDISK.ResourceID and LDISK.DeviceID0=SUBSTRING(OPSYS.WindowsDirectory0,1,2) LEFT OUTER JOIN v_GS_VIDEO_CONTROLLER DA on SYS.ResourceID = DA.ResourceID LEFT OUTER JOIN v_RA_System_SystemOUName a ON a.ResourceID=sys.ResourceID LEFT OUTER JOIN v_GS_WORKSTATION_STATUS c ON c.ResourceID=sys.ResourceID WHERE fcm.CollectionID = @CollID GROUP BY SYS.Netbios_Name0, fcm.SiteCode, OPSYS.Caption0, OPSYS.Version0, OPSYS.CSDVersion0, PROC1.MaxClockSpeed0, MEM.TotalPhysicalMemory0, LDISK.FreeSpace0,sys.User_Name0 ,c.LastHWScan ORDER BY 6, 8, 10, 12, 13, 1 Enjoy
  18. I would suggest going with SQL 2008 or 2008 r2 to be prepared for upgrades in the future. Also if you want to use the new feature of SCCM reporting services this is not included in SQL 2005.
  19. wmmayms

    Windows 7 SP1

    Best thing will be to build and capture a new image. And for already installed computer you will need to build a package.
  20. I created a new program for use in task sequences (the original install program has this commandline which wont work in OSD: [cscript.exe Policies\ApplyPolicy.vbs "FEPInstall.exe /s /q"]). Configure it like this for OSD deploy:
  21. Are you running this command from a package? If not make sure you run the command from the correct folder. Another easy fix would be to just create a .cmd file with your command and call the .cmd from your TS.
  22. What error messages are you getting? Have you tried anything to solve the problem?
  23. Application Upgrades through Task Sequence

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.