≡ Menu

Heading to the PowerShell Summit Europe 2014!

At the end of this month I’m heading to Amsterdam to attend the European PowerShell Summit. If you haven’t heard about it, the official Summit website describes it well saying: The Summit is considered an “intermediate to expert” level event – a deep dive, full of information that you won’t find elsewhere. Sessions are designed to be participatory, with the presenter leading the conversation and the audience asking questions, challenging assumptions, and offering their own perspectives. Like Windows PowerShell, our audience consists of IT administrators, developers, DevOps personnel, and more.

I’m delivering two sessions at this years Summit:

  • Automating Amazon Web Services with PowerShell – I’ll be covering the capabilities of the AWS Tools for Windows PowerShell. This will probably be done mostly as live demo as we walk through a building a small server environment from scratch.
  • PowerShell DSC in the AWS cloud – This talk will explore how you can utilize AWS CloudFormation with PowerShell DSC to deploy a highly available sever infrastructure environment from scratch.

There’s still time to register if you haven’t already. Registration closes on 9/10/14 so you better hurry if you’re going to attend. If you can’t make it, it’s my understanding that all sessions will be recorded. I’ll be sure to follow up with a post with links to the videos once they’re available.

Hope to see you in Europe!

0 comments

Updating the xIPAddress DSC Resource to Handle Dynamic IPs

If you’ve started working with PowerShell DSC, you’ve probably seen the various resources released through the DSC Resource Kit waves. One particularly useful module called xNetworking provides resources for statically setting IP Addresses and DNS server settings. For example, to set a static IP, you could use the xIPAddress resource in a configuration like the one below.

configuration Sample_xIPAddress { 
    Import-DscResource -Module xNetworking 
    Node server1 { 
        xIPAddress NewIPAddress { 
            IPAddress      = '192.168.1.10'
            InterfaceAlias = 'Ethernet'
            SubnetMask     = 24 
            AddressFamily  = 'IPV4'
        } 
    } 
}

This works perfectly fine in most scenarios, but the exception is when you want to statically assign an address that has already been obtained by the node via DHCP. The problem is the resource only checks to see if the current IP Address matches what is in the DSC configuration. It does not take static vs. dynamic IP address assignment into consideration. If the IP matches but has been set via DHCP, the IP will not be statically set.

To adjust this, a simple modification to the ValidateProperties helper function in the xIPAddress resource is required.

Looking in the MSFT_xIPAddress.psm1 file on line 142, you’ll see an if statement that starts with this evaluation:

if(!$currentIP.IPAddress.Contains($IPAddress))

This is the code checking to see if the IPAddress defined in the configuration matches the current IP on the machine. So, the first step to fixing this is to also check if we’re getting an IP via DHCP:

if(!$currentIP.IPAddress.Contains($IPAddress) -or $currentIP.PrefixOrigin -eq 'dhcp')

Ok, that’s better. Now, if we’re applying this configuration on a machine pulling the desired IP via DHCP, we’ll be able to catch it, but we need to add a little more code to handle this. It’s as simple disabling DHCP on the network interface with this addition:

if($currentIP.PrefixOrigin -eq 'dhcp') {
    Write-Verbose -Message "IPAddress is $($currentIP.IPAddress) via DHCP. Disabling DHCP"
    $null = Set-NetIPInterface -InterfaceAlias $InterfaceAlias -Dhcp Disabled
}

The remaining code will take care of statically setting the IP as needed.

You can get an updated version of the xNetworking resource module on github. This change has been merged into the cNetworking module in the PowerShell.org github repo.

0 comments

It’s time for another Exchange Connections conference in Vegas. This year Exchange Connections runs from September 30th through October 4th. There’s some really great content this year (along with a lot of really awesome speakers) covering On-premises Exchange, Hybrid deployments, Exchange Online, Exchange integration with Lync, and more. I’ll be delivering a pre-conference workshop Monday on how to use PowerShell to manage Exchange. Here’s the details:

From Zero to Hero: PowerShell for Exchange Server Boot Camp

In this pre-conference workshop, you will learn how to be effective in the Exchange Management Shell (EMS), even if you have little to no PowerShell experience. The command syntax in PowerShell can be intimidating at first, but once you understand some simple core concepts, you can vastly maximize your efficiency. Learn the techniques used to automate routine tasks and solve common problems that Exchange administrators face on a regular basis. Finally discover how to deal with the common pitfalls and stumbling blocks that arise when working with EMS. When you walk away, you’ll be ready to automate tasks in your own Exchange environment, armed with clear code samples that provision multiple recipients, make changes in bulk, generate advanced reports, and much more. Don’t let point and click administration slow you down any longer.

You can find the conference website here

If you register before the end of June you can get an early bird registration discount

Also check out Tony Redmond’s write up on the conference.

See you in Vegas!

0 comments

I’ll be speaking at TechMentor, which runs September 30th through October 4th 2013 in Las Vegas, Nevada. Join me at the newly formatted event with hand-on labs and deep dive sessions. Surrounded by your fellow IT professionals, TechMentor provides you with immediately usable IT education that will keep you relevant in the workforce. There is a ton of great content covering Security, Networking, PowerShell, System Center, SharePoint, Virtualization, and of course, Exchange & Office 365.

I’ll be presenting the following sessions:

  • Moving to Exchange 2013: An Upgrade and Coexistence Deep Dive – It’s no secret that executing a smooth Exchange upgrade requires a lot of careful planning. In this session, you’ll learn what is required to successfully implement and move to an Exchange 2013 on-premises deployment. Get a head start on planning your project and walk away with tips from the field, best practices, and implementation techniques used by early adopters in real-world deployments.
  • To the Cloud! Exchange Hybrid Deployments and Office 365 – Find out how you can seamlessly integrate your on-premises Exchange organization with Office 365. With rich co-existence, organizations can host mailboxes in the cloud, and on-premises, while retaining the best features offered by Exchange across both platforms. You can share calendars and free/busy information; maintain a unified global address list, archive e-mail messages, and much more. Learn about key components such as Directory Synchronization and Active Directory Federation Services, and leave the session with a good grasp on how to implement your own hybrid deployment.

As a speaker, I can extend $400 savings on the 5-day package. Register here: http://bit.ly/TMVSK14Reg and use code TMVSK14.

Learn how you can build a more productive IT environment at TechMentor Las Vegas — bring the IT issues that keep you up at night and prepare to leave this event with the answers, guidance and training you need. Register now and I’ll see you in Vegas!

1 comment

Here’s a quick tip. If you want to view or export a list of all your Response Group agents and associated groups in Lync, use the Get-CsRgsAgentGroup cmdlet.

foreach($i in Get-CsRgsAgentGroup) {
    $i.AgentsByUri | select @{n='Response Group';e={$i.name}},@{n='Agent';e={$_.LocalPath}}
} 

The output would give you something like this.

If you want to export to a CSV file, use this syntax.

$report = foreach($i in Get-CsRgsAgentGroup) {
    $i.AgentsByUri | select @{n='Response Group';e={$i.name}},@{n='Agent';e={$_.LocalPath}}
}
$report | Export-Csv c:\rgs.csv -NoTypeInformation

Not the most intuitive or elegant code, but it works.

1 comment