PowerShell for Windows Admins


September 26, 2013  12:58 PM

Rolling back time



Posted by: Richard Siddaway
PowerShell Basics

There are many situations where you want to roll the date back – checking a file’s last access time, processing event logs, checking a password expiry in AD.

Get-Date (or more accurately the underlying System.DateTime .NET class offers a number of options.

Lets say you need a date that’s 3 months in the past.

You could create it directly:

£> Get-Date -Day 26 -Month 6 -Year 2013

26 June 2013 19:41:42

Alternatively:

£> Get-Date -Date “26 June 2013″

26 June 2013 00:00:00

Notice the difference on the times. I’m going to ignore the time portion.

Get-Date supplies a number of methods you could use:

Get-Date | Get-Member -MemberType Method

Add
AddDays
AddHours
AddMilliseconds
AddMinutes
AddMonths
AddSeconds
AddTicks
AddYears

£> $ts = New-TimeSpan -Days 91
£> $ts

Days : 91
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 0
Ticks : 78624000000000
TotalDays : 91
TotalHours : 2184
TotalMinutes : 131040
TotalSeconds : 7862400
TotalMilliseconds : 7862400000

£> (Get-Date).Add(-$ts)

27 June 2013 19:46:06

£> (Get-Date).AddDays(-$ts.Totaldays)

27 June 2013 19:46:32

£> (Get-Date).AddHours(-$ts.TotalHours)

27 June 2013 19:48:32

£> (Get-Date).AddMinutes(-$ts.TotalMinutes)

27 June 2013 19:49:07

£> (Get-Date).AddSeconds(-$ts.TotalSeconds)

27 June 2013 19:50:18

£> (Get-Date).AddMilliseconds(-$total.TotalMilliseconds)

26 September 2013 19:51:19

£> (Get-Date).AddTicks(-$total.TotalTicks)

26 September 2013 19:51:38

You can also do

£> (Get-Date).AddMonths(-3)

26 June 2013 19:52:12

£> (Get-Date).AddYears(-0.25)

26 September 2013 19:52:37

Lots of ways to solve the same problem. While you normally wouldn’t want to calculate a date 3 months in the past based on seconds or ticks the fact that you can use those values opens up other possibilities.

The [datetime] class supplies a good set of methods for manipulating dates. Knowing they are there enables you to use the most appropriate to solve your task.

September 25, 2013  2:10 AM

Server Documentation



Posted by: Richard Siddaway
PowerShell 3, WMI

No one likes documenting their servers but is a necessary job. As the start of a series on taking those first automation steps – you’ve learned PowerShell and now you want to put it to use – I have an article on the Scripting Guy blog that shows you how to get started documenting your servers

http://bit.ly/15T5aSK

Enjoy

If you have any ideas for future articles in the series please leave a comment


September 23, 2013  12:26 PM

Select and List



Posted by: Richard Siddaway
PowerShell Basics

There are many times when I need to do something like this:

get-Whatever | select –first 1 | format-list –property *

Normally its because I need to discover the properties on an object and see some representative data at the same time. If I just wanted the properties I could use Get-Member.

Getting tired of typing

select –first 1 | format-list –property *

Its a bit repetitive & boring I decided to look at a function to do this for me and ended up with this

function Select1FullList {
param (
[scriptblock]$scriptblock
)
Invoke-Command -ScriptBlock $scriptblock |
Select-Object -First 1 |
Format-List -Property *
}

New-Alias -Name sfl -Value Select1FullList

I decided on a scriptblock as input because I wasn’t sure what I’d be wanting to see. For instance

Get-mailbox | Get-mailboxstatistics

could be be my input.

I also decided to use an alias as this is a command line tool for use while I’m writing code. My feelings on aliases in scripts still stand.

Still deciding if I need to add a computername parameter to give it remoting capabilities.

Any ways its going into my profile for now & we’ll see how it works out.


September 21, 2013  5:37 AM

AD Month of Lunches–Chapt 18 & 19 in MEAP



Posted by: Richard Siddaway
Active Directory, Books, PowerShell 3, Windows Server 2012, Windows Server 2012 R2

An updated MEAP has been released for Active Directory Management in a Month of Lunches. This one adds chapters 18 & 19

Chapter 18, “Managing AD trusts”
Chapter 19, “Troubleshooting your AD”
The MEAP is available from www.manning.com/siddaway3

Enjoy


September 21, 2013  4:23 AM

PowerShell Hero



Posted by: Richard Siddaway
PowerShell, powershell.org

PowerShell.org is giving you the chance to nominate your PowerShell hero – someone how has helped you & others with their PowerShell problems.

Details from http://powershell.org/wp/2013/09/20/nominate-your-powershell-hero/


September 20, 2013  1:51 PM

ErrorAction and WarningAction



Posted by: Richard Siddaway
PowerShell Basics

You’ve all probably done something like this:

£> Get-Process -Name xyz
Get-Process : Cannot find a process with the name “xyz”. Verify the process name and call the cmdlet again.
At line:1 char:1
+ Get-Process -Name xyz
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (xyz:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

First though of many people is to do this

Get-Process -Name xyz -ErrorAction silentlycontinue

Now, thats not good as you don’t know that an error has occurred. Its better to deal with it rather than suppress it so you wrap it in a try-catch:

£> try {
>> Get-Process -Name xyz -ErrorAction Stop
>> }
>> catch{
>> “oops”
>> }
>>
oops

In reality you would want to do more than say “oops”

There are a number of situations where cmdlets give you a warning rather than an error. if you want to suppress them use –WarningAction. It has the same options as –ErrorAction

SilentlyContinue. Suppresses the warning message and continues
executing the command.

Continue. Displays the warning message and continues executing
the command. “Continue” is the default value.

Inquire. Displays the warning message and prompts you for
confirmation before continuing execution. This value is rarely
used.

Stop. Displays the warning message and stops executing the
command.

More details in about_Common_Parameters


September 20, 2013  2:39 AM

Using WMI methods with the CIM cmdlets



Posted by: Richard Siddaway
CIM, PowerShell 3, WMI

Using WMI class methods with the CIM cmdlets can cause a lot of confusion. This article, of mine, should clear up that confusion for you.

http://blogs.technet.com/b/heyscriptingguy/archive/2013/09/20/hey-dude-where-are-my-methods.aspx


September 20, 2013  1:41 AM

iOS7–1 giant step–backwards



Posted by: Richard Siddaway
Opinion

Just upgraded my ipad to iOS7 overnight. It looks awful. Like a child’s toy. Apple may have been a triumph of style over substance in the past but they’ve lost any claim to style with this one.


September 18, 2013  1:47 PM

Module versions in PowerShell 4.0



Posted by: Richard Siddaway
PowerShell v4, Windows 8.1

Comparing a Windows 8.1 build with a Windows 8 machine I think these modules remain the same between Windows 8/PowerShell 3 and Windows 8.1/PowerShell 4

BitLocker
BitsTransfer
BranchCache
CimCmdlets
DirectAccessClientComponents
DnsClient
iSCSI
ISE
Kds
Microsoft.PowerShell.Diagnostics
Microsoft.PowerShell.Host
Microsoft.PowerShell.Security
Microsoft.WSMan.Management
MMAgent
MsDtc
NetConnection
NetSwitchTeam
NetTCPIP
NetworkConnectivityStatus
NetworkTransition
PKI
PSDiagnostics
PSWorkflowUtility
ScheduledTasks
TroubleshootingPack
Wdac
WindowsDeveloperLicense
WindowsErrorReporting

While these modules appear to have changed – at least with the version number

1.0.0.0 AppBackgroundTask
2.0.0.0 AppLocker
2.0.0.0 Appx
1.0.0.0 AssignedAccess
1.0 Defender
2.0 Dism
2.0.0.0 International
3.1.0.0 Microsoft.PowerShell.Management
3.1.0.0 Microsoft.PowerShell.Utility
2.0.0.0 NetAdapter
1.0.0.0 NetEventPacketCapture
2.0.0.0 NetLbfo
1.0.0.0 NetNat
2.0.0.0 NetQos
2.0.0.0 NetSecurity
1.0.0.0 PcsvDevice
1.1 PrintManagement
1.0 PSDesiredStateConfiguration
1.1.0.0 PSScheduledJob
2.0.0.0 PSWorkflow
2.0.0.0 SecureBoot
2.0.0.0 SmbShare
2.0.0.0 SmbWitness
1.0.0.0 StartScreen
2.0.0.0 Storage
2.0.0.0 TLS
2.0.0.0 TrustedPlatformModule
2.0.0.0 VpnClient
1.0.0.0 WindowsSearch

Some of these are new – look for the 1.0 version numbers. I’ll be working through the changes over the next few weeks. More to come


September 17, 2013  1:04 PM

Death of the command line?



Posted by: Richard Siddaway
PowerShell

I saw this today “the desktop is going to disappear, just like the command line before it” in http://windowsitpro.com/windows-8/windows-desktop-death

Has the guy never heard of PowerShell?


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: