Monthly Archives: October 2013

A thought for Halloween

Just a quick thought

31 OCT = 25 DEC

Enjoy

Book offers from Manning

those really nice people at www.manning.com have some real bargains this weekend:

Thursday October 31--Half off all MEAPs

   Friday November 1--Half off all pBooks

   Saturday November 2--Half off all eBooks

   Sunday November 3--Half off any purchase

 

enjoy

Using WQL in PowerShell

WMI Query Language – WQL – is used to either form a query directly or indirectly in the –Filter parameter of Get-WmiObject and Get-CimInstance.

$query = "SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3"
Get-CimInstance -Query $query

OR using the –Filter parameter

Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType = 3"

WQL is a limited subset of SQL.

If you want to find out more there is a help file available in PowerShell 3.0 and above

get-help about_WQL -ShowWindow

Using WQL

WMI Query Language – WQL – is used to either form a query directly or indirectly in the –Filter parameter of Get-WmiObject and Get-CimInstance. $query = “SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3″Get-CimInstance -Query $query OR using the –Filter … Continue reading

SCCM 2012 lunches deal of the day

Manning’s deal of the day is Learn SCCM 2012 in a Month of Lunches – get 50% off – today only at www.manning.com

where syntax

This type of construction has been part of PowerShell since the very beginning:

Get-Process | where {$_.Handles -gt 500}

 

Get some data and use where-object to filter the data based on the value of some property. $_ represents the object on the pipeline.

PowerShell 3.0 introduced a simpler syntax

Get-Process | where Handles -gt 500

which is shorthand for

Get-Process | where -Property Handles -gt -Value 500

 

At which point it becomes obvious what is happening – you are comparing a property against a value. There are a whole set of comparison operators you can use in this manner – see the help file for details.

This new syntax makes life much easier when you only have a single comparison to perform – you need to use the old style syntax if you need to test on two properties.

The problem is that I don’t see this syntax being used that much. If you are using PowerShell 3.0 or above I recommend changing to the new style syntax.  It does save typing.

A new lunches book

Manning have started the early access program (MEAP) for Learn SCCM 2012 in a Month of Lunches – http://www.manning.com/bannan

SCCM is a major component for managing your environment. Looking forward to reading it – especially as it has a chapter devoted to PowerShell

Powershell help file updates

The updated PowerShell help files are available for all but a handful of modules – the outstanding ones should be available this week.

 

Time to run update-help

Outputting collections from AD

Have you ever tried anything like this:

 

Get-ADUser -Filter * -Properties * |
Select Name, LastLogondate, PasswordNeverExpires, Enabled,
@{N='OU'; E={($($_.distinguishedName) -split ",",2)[1] }},
Memberof |
Export-csv -Path users.csv -NoTypeInformation

 

You want some basic information about the users plus their group membership

What you get is this

Name                 : Fred Friday
LastLogondate        :
PasswordNeverExpires : False
Enabled              : True
OU                   : OU=Mailboxes,DC=Manticore,DC=org
Memberof             : Microsoft.ActiveDirectory.Management.ADPropertyValueCollection

The data is OK apart from the group membership where you get the name of the object.

All you need is a little trick with sub expressions

Get-ADUser -Filter * -Properties * |
Select Name, LastLogondate, PasswordNeverExpires, Enabled,
@{N='OU'; E={($($_.distinguishedName) -split ",",2)[1] }},
@{N='Groups'; E={$($_.Memberof)}} |
Export-csv -Path users.csv –NoTypeInformation

and then the data comes through

Name                 : Fred Friday
LastLogondate        :
PasswordNeverExpires : False
Enabled              : True
OU                   : OU=Mailboxes,DC=Manticore,DC=org
Groups               : CN=Wednesdaylist,OU=DistributionGroups,DC=Manticore,DC=org

Enjoy

Setting AD attributes from a CSV file

Back in this post http://richardspowershellblog.wordpress.com/2012/02/29/setting-a-users-home-directory/ I looked at setting the users home directory. I recently got a question about using a CSV file for input.

CSV files have been around for years and are likely to be with us for a long time to come – its a very useful and compact format.  using a CSV file to set attributes is a two stage process – read the data then make the changes.

I’ll use the home directory data as an example.  If you have a csv file with an entry for every user looking like this:

samaccountname : sjones
Drive          : H:
Home           :
\\server2\Home\sjones

You can then do this:

Import-Csv .\homes.csv |
foreach {
Set-ADUser -Identity $_.samaccountname -HomeDirectory $_.Home  -HomeDrive $_.Drive -PassThru
}

If the attribute doesn’t have a parameter then:

Import-Csv .\homes.csv |
foreach {
Set-ADUser -Identity $_.samaccountname -Replace @{HomeDirectory = "$($_.Home)"; HomeDrive = "$($_.Drive)"}  -PassThru
}