30 April 2013

How to stop those annoying Charter Communications Telemarketers

As a Charter customer, it's very annoying to be constantly bombarded by telemarketing calls. Charter is relentless. No matter how much you ask them not to call you, they will continue and the reps are very aggressive. They are exempt from the National Do Not Call Registry because there is a business/customer relationship. At one point, I was contacted 16 times within two weeks from their 909-259-0292 number. They do change up the number that appears on the caller ID. Sometimes I have gotten their 404 area code.

Their website now has a privacy page that allows you to opt out of all marketing calls. Go to http://Charter.com. At the bottom, click on Your Privacy Rights.


Once the next screen comes up, click on Privacy Preferences. 


Now that you are on this page, fill out all of the fields. You will need your account number. At the bottom, select All of the above. Click submit and you should not receive any further harassing calls from them.

26 April 2013

Custom Naming Distribution Points

If you are using standard machines as distribution points in your remote offices, the naming might be an issue for you, as it was for us. There was nothing in the naming that distinguished them to allow us to know their location. The only option we had was to keep a spreadsheet list of the machines with the associated location. The easy way around this is to create a distribution point group that allows you to custom name the group. You only associate the one distribution point to that group, which then  gives you the custom naming schema you were looking for. When you distribute and deploy software, you select from the distribution point group instead of from the distribution points, thereby allowing for easy dissemination. 

25 April 2013

Deploying GimpShop

As you will see, GimpShop is open-source  but full of plugins. It is nearly impossible to do a silent install without something like AutoIT. You can't open the executable up in something like PeaZip because the only thing that will show up is one DLL. When you run the executable, it will extract the msi to the root of %TEMP%. It also creates a couple of temporary directories, which are not needed for repackaging. I packaged up version 2.8, so the name of the msi was GimpShop2.8.msi. That is all you need to install the application. The msi does not contain any plugins and you can do a simple /qb- /norestart. 

23 April 2013

SCCM: Deploying from a Network Share

Sometimes you need to deploy from a network share instead of a distribution point. The reason I do this sometimes is because of the sheer size of some installations. For instance, Autodesk Revit 2013 Building Premium is 26 gigabytes. Transferring that across a WAN will take a LONG time. We do maintain network shares in our offices that we update once a month, which contains all of our installation programs.

To start, you will want to create your Application install. You will want to leave the content location blank. Fill in the Installation program and Uninstall Program fields with the command line parameters. For the Installation Start In and Uninstall Start In fields, enter the network share location of the application install. You do not want to distribute the content to a distribution point, as there is no need since the package will be pointing to a network share. When you deploy it, uncheck the Automatically distribute content for dependencies and do not specify any distribution points. That is all that is to deploying via a network share. 

22 April 2013

SCCM: Distribution point won't update because of minor changes

When you make a minor change to an installer program, the change may not update in SCCM/SMS. This is because if there was a minor change within the script and there is no size difference, SCCM will think it is the same. It is possible to completely update the distribution point with a new package source, but an issue arises if you had already run the package on machines and had set it to download the package first. The changes can be seen as the same that is on the distribution point and the local machine, therefore the changes are not pushed down. There are two options in this scenario. First is to clear out the local caches on the target machines. This will force SCCM/SMS to redownload the newer package. The second is to delete the package and recreate it so that a new version is created on the distribution points that does not match the version downloaded on the local machines. This causes the package to be re-downloaded to the local machines, thereby pushing the new changes. 

09 April 2013

Unlimited International Calling back to the US for $9.95

Last August and September, I was in Africa. While there, I called and texted back to the US using a Voice over IP service called Line2. It is an app that works on the iPhone, iPad, or Android. All I can say is that it was great. I used it while connected to WiFi routers. One of the big things I liked about it was that I did not have to treat the calls as international. When I called back to Nashville, TN from Johannesburg, South Africa, I just dialed 615-xxx-xxxx. There was some lag, but the calls were still good quality.


  • Local calling back to the US
  • Flat rate of $9.95
  • Good reception
  • No international calling prefixes
The app also works through a 3G/4G connection on the phone, but I did not want to have to bother with and internation SIM card, pricing, and such.

04 April 2013

Powershell: Installation Script Functions

Here are several snippets I have created for writing powershell application installation scripts. These make it a lot faster by standardizing the functions to use as reusable code.

Display a Balloon Tip
 Function BalloonTip($ApplicationName, $Message, $DisplayTime){  
      [system.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null  
      $balloon = New-Object System.Windows.Forms.NotifyIcon  
      $path = Get-Process -id $pid | Select-Object -ExpandProperty Path  
      $icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)  
      $balloon.Icon = $icon  
      $balloon.BalloonTipIcon = 'Info'  
      $balloon.BalloonTipTitle = "{Company Name}"  
      $balloon.BalloonTipText = $ApplicationName+[char]13+[char]13+$Message  
      $balloon.Visible = $true  
      $balloon.ShowBalloonTip($DisplayTime)  
 }  

Create a log folder and set log file
 $Global:LogFolderName = ""  
 Function CreateLogFolder{  
      If((Test-Path -path c:\temp) -ne $true){  
           New-Item -ItemType directory -Path c:\temp  
      }  
      If((Test-Path -path c:\temp\$Global:LogFolderName) -ne $true){  
           New-Item -ItemType directory -Path c:\temp\$Global:LogFolderName  
      }  
      $Global:LogFile = "c:\temp\"+$Global:LogFolderName+"\"+$Global:LogFolderName+".log"  
      Write-Host $Global:LogFile  
 }  
 CreateLogFolder  

Enable/Disable File Security Checks
 #Disable File Security  
 $env:SEE_MASK_NOZONECHECKS = 1  
 #Enable File Security  
 Remove-Item env:\SEE_MASK_NOZONECHECKS  

Determine if the OS is 32-bit or 64-bit
 $Global:OS  
 Function GetOSArchitecture{  
      $Global:OS=Get-WMIObject win32_operatingsystem  
      $Global:OS.OSArchitecture  
      #Answers: 32-bit, 64-bit  
 }  

Retrieve the relative path the powershell script was executed from
 Clear-Host  
 $Global:RelativePath  
 Function GetRelativePath{  
      $Global:RelativePath=(split-path $SCRIPT:MyInvocation.MyCommand.Path -parent)+"\"  
      Write-Host $Global:RelativePath  
 }  
 GetRelativePath  

Uninstall previous versions of programs
 Function UninstallPreviousPrograms{  
      #Change '%application%' to whatever app you are calling  
      $Output = wmic product where "description like '%sketchup%'" get IdentifyingNumber  
      $Output | ForEach-Object {  
           $_ = $_.Trim()  
        if(($_ -ne "IdentifyingNumber")-and($_ -ne "")){  
          $GUID = $_  
        }  
      }  
      $Arguments = "/X"+[char]32+$GUID+[char]32+"/qb- /norestart"  
      (Start-Process -FilePath "msiexec.exe" -ArgumentList $Arguments -Wait -Passthru).ExitCode  
 }  
 UninstallPreviousPrograms  

SCCM: How to update packages on the distribution point

There are two ways to update a package on the distribution point:

  1. Open up the Application package under Software Library and select the Content Locations tab. Now select the distribution point and click Redistribute.
  2. Select the Software Library and then select an app under the Application Management. At the bottom, select the Deployment Types tab. Right-click on the advertisement and select Update Content.

03 April 2013

SCCM: SMS Functions missing in SCCM

As you have seen, a lot of the functions in SMS are now longer there in SCCM. For instance, you used to be able to re-run and advertisement on a specific machine. That is no longer there. There is a way to get the functions back. SCCM Client Center is a great alternative. It is a third-party client that gives back that functionality missing in SCCM. I highly recommend it. Here are just a few things it provides:


  • WMI Repair
  • Resizing the local SCCM cache
  • Shutdown/Restart/Logoff
  • Access both SCCM and system logs
  • Re-run advertisements
  • List all advertisements on the machine
  • Monitor SCCM Jobs currently running
  • Download User Policy
There are many more functions this provides. The application can be found here

SCCM: SMS equivalent to updating the distribution point

In SMS, in order to update the distribution point, you go to the packages and select the distribution points, and click update distribution points.


The equivalent in SCCM is to go to the Software Library-->Application Management-->Applications, select the application. At the bottom of the screen, click the Deployment Types tab. Now right-click on the item in the menu above and click Update Content. That is all that is to it.