PowerShell for Windows Admins


October 30, 2013  3:05 PM

Using WQL in PowerShell



Posted by: Richard Siddaway
PowerShell 3, PowerShell v4, WMI

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

October 30, 2013  2:35 AM

SCCM 2012 lunches deal of the day



Posted by: Richard Siddaway
Books

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


October 29, 2013  4:44 PM

where syntax



Posted by: Richard Siddaway
PowerShell 3, PowerShell Basics, PowerShell v4

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.


October 29, 2013  3:29 PM

A new lunches book



Posted by: Richard Siddaway
Books

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


October 28, 2013  3:09 PM

Powershell help file updates



Posted by: Richard Siddaway
PowerShell 3, PowerShell v4

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


October 28, 2013  2:00 PM

Outputting collections from AD



Posted by: Richard Siddaway
Active Directory, PowerShell

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


October 28, 2013  1:36 PM

Setting AD attributes from a CSV file



Posted by: Richard Siddaway
Active Directory, PowerShell

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
}


October 27, 2013  11:09 AM

WMF 4.0 now available



Posted by: Richard Siddaway
PowerShell v4

You’ve probably seen this already but just in case – Windows Management Framework 4.0 is now available to download. It includes PowerShell 4.0 and Desired State Configuration plus updates to PowerShell Web Access. WinRm is also part of the package.

Versions are available for:

Windows 2012

Windows 7 SP1

Windows 2008 R2 SP1

Windows 7 Embedded

There isn’t a version for Windows 8 – it comes as part of the Windows 8.1 upgrade

Windows 8.8 and Server 2012 R2 come with WMF 4.0 pre-installed.

You need .NET 4.5 installed before installing WMF 4.0


October 27, 2013  10:48 AM

More Scripting Guy posts



Posted by: Richard Siddaway
PowerShell Basics

I’ve had some more articles posted on the Scripting Guy blog

http://blogs.technet.com/b/heyscriptingguy/archive/2013/10/27/the-admin-s-first-steps-local-group-membership.aspx

http://blogs.technet.com/b/heyscriptingguy/archive/2013/10/20/powertip-find-members-of-critical-groups-with-powershell.aspx

http://blogs.technet.com/b/heyscriptingguy/archive/2013/10/20/the-admin-s-first-steps-empty-groups.aspx

Enjoy


October 14, 2013  2:22 AM

Sunday’s Scripting Guy blog



Posted by: Richard Siddaway
PowerShell Basics

I had another post in my Admin’s First Steps series on the Scripting Guy blog yesterday –

http://blogs.technet.com/b/heyscriptingguy/archive/2013/10/13/powertip-use-poweshell-to-start-service-on-remote-machine.aspx

http://blogs.technet.com/b/heyscriptingguy/archive/2013/10/13/the-admin-s-first-steps-discovering-shares.aspx

Enjoy


Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to: