• Using a MacBook to connect to a Cisco router

    We have a “USBG-232MINI” USB to Serial adapter and I needed to connect to a Cisco router. GNU screen to the rescue!!

    The command is

    screen /dev/tty.usbserial-A9005yuF 9600 (Where A9005yuF is probably unique)

    And to exit hit Control+A then K.


  • PowerShell to list all users and when their password expires

    I wanted to dump a list of accounts and their password expiration dates – accounts that were not disabled, that had a certain description, and were not set with “Password never expires”

    (Get-ADUser -filter {(Description -notlike "Service*") -and (Enabled -eq "True") -and (PasswordNeverExpires -eq "False")} -properties *) |
    select samaccountname,description,
    @{N="LastChanged";E={(Get-Date([System.DateTime]::FromFileTimeUtc($_.pwdLastSet))).ToShortDateString()}},
    @{N="Expires";E={(Get-Date([System.DateTime]::FromFileTimeUtc($_.pwdLastSet))).AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays).ToShortDateString()}}

  • 1000 visitors in a month!

    I have been using this Analytics Widget on my dashboard and I  just hit 1000 visits in a month! I know that is nothing in compared to a real site, but it is a milestone (in my mind)!


  • My PowerShell cheat sheet

    I am trying to  be a better PowerSheller. I thought I would create a post with queries I have figured out. I hope to keep adding more.

    • We needed to change a whole bunch of distribution groups – append them with “-NewName”. This query created our origianl list, the last 50 distribution groups created, with columns representing the old and new names:
    Get-ADGroup -filter {GroupCategory -eq "Distribution"} -Properties *|
    Select-Object -Property Name,whenCreated,mail,
    @{N="NewMail";E={$_.mail.replace("@","-NewName@")}} -last 50
    
    • Similar to the query above, but adds a column indicating if we had changed the name or not – a status column. I used a conditional inside of an Expression field. And I looped through an array retuned by “proxyAddresses”
    Get-ADGroup -filter {GroupCategory -eq "Distribution"} -Properties * |
    sort created |
    select Name,
    @{N="NewName";E={if($_.Name -like "*-NewName"){$_.Name}else{$_.Name+"-NewName"}}},
    @{N="NewMail";E={if($_.Mail -like "*[email protected]"){$_.Name}else{$_.Mail.replace("@","-NewName@")}}},
    @{Name="proxyAddresses";Expression={foreach ($SMTP in $_.proxyAddresses){if ($SMTP.ToLower().StartsWith("smtp:")){$SMTP}}}},
    @{N="Completed";E={if($_.Name -like "*-NewName"){"Completed"}else{"ToDo"}}} |
    convertto-csv > MasterList.csv
    
    • Another variation with a conditional inside of  the filter
    Get-ADGroup -filter {GroupCategory -eq "Distribution" -and Name -like "*-NewName"} -Properties * |
    sort created | select Name,Samaccountname,Displayname,Mailnickname,Mail,
    @{Name="proxyAddresses";Expression={foreach ($SMTP in $_.proxyAddresses){if ($SMTP.ToLower().StartsWith("smtp:")){$SMTP}}}} |
    convertto-csv > Completed.csv
    
    • More to come. Maybe these will be helpful to some searchers out there.

  • Support for .vcf files in WordPress

    Our developers created a website that had vCard files for each staff member. The problem was that when people clicked on them, rather than downloading them, some web browsers displayed the content of the file.

    Ended up that apache did not know how to handle “.vcf” files. The change below is now part of my standard setup script:

    sed -i.ORIG “/text\/xml-external-parsed-entity/a\text\/x-vcard\t\t\tvcf” /etc/mime.types


  • Comparing master and slave MySQL WordPress DBs

    My VPS host – Rackspace contacted me the other day to tell me that my host server became unresponsive. After it came back online I went to my MySQL replicated slave to check the status. The /var/log/mysqld.log said:

    Error reading packet from server: Client requested master to start replication from impossible position

    This article siad

    “9 times out of 10 it’s because the master crashed and when it came back online a new binlog file was made”.

    That sounds about right, my virtual host was probably force rebooted, and my VM crashed. I recovered my DBs by re-mirroring my DBs over an AutoSSH connection between my two servers.

    The article goes on to say:

    Now if your super sensitive of lost events because a row or two could of been lost from this replication event, do some spot testing for tables written to often”

    I wanted to verify my DBs were the same on both master and slave, so I wrote this BASH function:

    function CompareDBs {
    if [ $1 ]; then
    DB=$1;
    RDBDUMP=$(mysqldump -h <a href="tel:127.0.0.1">127.0.0.1</a> -P 7777 --order-by-primary --skip-extended-insert --skip-opt --skip-comments $DB)
    LDBDUMP=$(mysqldump --order-by-primary --skip-extended-insert --skip-opt --skip-comments $DB)
    diff -y --suppress-common-lines &lt;(echo &quot;$RDBDUMP&quot;) &lt;(echo &quot;$LDBDUMP&quot;)
    fi
    }

    Call the function with the DB you want to compare. This script assumes that you have an SSH Tunnel between your two servers.

     

    ********* MAKE SURE YOUR TIME IS RIGHT ON BOTH SERVERS*********
    This will save you some hair pulling!


  • Drop all MySQL DBs (except mysql & information_schema)

    For some reason I can not remember the following command. I have been using it a lot lately when testing MySQL replication.

    1. mysql –skip-column-names –batch -e “show databases” | grep -E -v “mysql|information_schema” | xargs -I “@@” mysql -e “drop database @@”

    This will drop all DBs except the default mysql and information_schema dbs. Then I can Rinse and Repeat this script. Of course only do this on the slave!


  • WordPress 3.2 requirements and CentOS 5.6

    Current requirements

    • PHP version 4.3 or greater
    • MySQL version 4.1.2 or greater

    WordPress 3.2 requirements:

    • PHP version 5.2.4 or greater
    • MySQL version 5.0 or greater.

    Default PHP on Cent0S 5.6 = PHP 5.1.6.

    CRAP

    Updated: See this post on how to install an updated PHP on CentOS 5.6