February 4, 2012 9:31 AM
Posted by: Richard Siddaway
PowerShellThe 2012 Scripting Games were announced
http://blogs.technet.com/b/heyscriptingguy/archive/2012/01/30/scripting-guys-announce-the-2012-powershell-scripting-games.aspx
They will start on 2 April – with events released to schedule after that. The usual Advanced and Beginner categories will be available
An all links page is available
http://blogs.technet.com/b/heyscriptingguy/archive/2012/02/04/the-2012-windows-powershell-scripting-games-all-links-on-one-page.aspx
This is worth book marking.
If you didn’t compete last year – follow the links to see the type of fun that is in store.
Last year there were some amazing PowerShell scripts submitted – looking forward to this years games already.
And just to add to the fun – this year you can use PowerShell v3
January 28, 2012 2:51 PM
Posted by: Richard Siddaway
Active Directory,
PowerShell,
WMIContinuing our quick look at The ActiveDirectory name space lets have a look at the MSAD_NamingContext class
Get-WmiObject -Namespace root\MicrosoftActiveDirectory -Class MSAD_NamingContext |
Format-Table DistinguishedName, IsFullReplica –AutoSize
DistinguishedName IsFullReplica
—————– ————-
DC=DomainDnsZones,DC=Manticore,DC=org True
DC=ForestDnsZones,DC=Manticore,DC=org True
CN=Schema,CN=Configuration,DC=Manticore,DC=org True
CN=Configuration,DC=Manticore,DC=org True
DC=Manticore,DC=org True
This is equivalent to the information you see in the root of the AD provider
PS> Get-ChildItem -Path AD:\
Name ObjectClass DistinguishedName
—- ———– —————–
Manticore domainDNS DC=Manticore,DC=org
Configuration configuration CN=Configuration,DC=Manticore,DC=org
Schema dMD CN=Schema,CN=Configuration,DC=Manticore,DC=org
ForestDnsZones domainDNS DC=ForestDnsZones,DC=Manticore,DC=org
DomainDnsZones domainDNS DC=DomainDnsZones,DC=Manticore,DC=org
January 28, 2012 10:20 AM
Posted by: Richard Siddaway
Active Directory,
PowerShell v2,
WMIA lot of the Active Directory related functionality has been removed from WMI but there is a little bit left in the root\MicrosoftActiveDirectory namespace.
This is on a Windows 2008 R2 domain controller – I don’t know if this is available on down level versions of Windows.
Get-WmiObject -Namespace root\MicrosoftActiveDirectory -List | where {$_.Name -notlike "__*"}
ReplicationProvider1
MSAD_ReplPendingOp
Microsoft_TrustProvider
Microsoft_DomainTrustStatus
Microsoft_LocalDomainInfo
MSAD_NamingContext
MSAD_ReplCursor
MSAD_DomainController
MSAD_ReplNeighbor
The mixture of naming conventions doesn’t help but lets start looking at some domain information
Get-WmiObject -Namespace root\MicrosoftActiveDirectory -Class Microsoft_LocalDomainInfo
The following properties of interest are returned
DCname : SERVER02
DNSname : Manticore.org
FlatName : MANTICORE
SID : S-1-5-21-3881460461-1879668979-35955009
TreeName : Manticore.org
We can also get a quick replication test
Get-WmiObject -Namespace root\MicrosoftActiveDirectory -Class MSAD_DomainController |
select CommonName, DistinguishedName, IsAdvertisingToLocator, IsGC, IsNextRIDPoolAvailable,
IsRegisteredInDNS, IsSysVolReady, NTDsaGUID, PercentOfRIDsLeft, SiteName,
@{N="OldestQueuedAddition"; E={$_.ConvertToDateTime($_.TimeOfOldestReplAdd)} },
@{N="OldestQueuedDeletion"; E={$_.ConvertToDateTime($_.TimeOfOldestReplDel)} },
@{N="OldestQueuedModification"; E={$_.ConvertToDateTime($_.TimeOfOldestReplMod)} },
@{N="OldestQueuedReplicationSync"; E={$_.ConvertToDateTime($_.TimeOfOldestReplSync)} },
@{N="OldestQueuedReplicationUpdate"; E={$_.ConvertToDateTime($_.TimeOfOldestReplUpdRefs)} }
CommonName : SERVER02
DistinguishedName : CN=NTDS Settings,CN=SERVER02,CN=Servers,CN=Site1,CN=Sites,CN=Configuration,DC=Manticore,DC=org
IsAdvertisingToLocator : True
IsGC : True
IsNextRIDPoolAvailable : False
IsRegisteredInDNS : True
IsSysVolReady : True
NTDsaGUID : baba1150-8a6a-41ac-9889-4b69268d3f7c
PercentOfRIDsLeft : 91
SiteName : Site1
OldestQueuedAddition : 01/01/1601 00:00:00
OldestQueuedDeletion : 01/01/1601 00:00:00
OldestQueuedModification : 01/01/1601 00:00:00
OldestQueuedReplicationSync : 01/01/1601 00:00:00
OldestQueuedReplicationUpdate : 01/01/1601 00:00:00
The 1601 dates mean nothing is queued
January 27, 2012 2:10 PM
Posted by: Richard Siddaway
Deep dive,
PowerShellThe 2012 PowerShell Deep Dive has been announced – April 29 – May 2 in San Diego.
http://blogs.msdn.com/b/powershell/archive/2012/01/27/it-s-time-for-another-powershell-deep-dive.aspx
This time PowerShell is a full track so expect more of your favourite stuff. Hope to see you there.
January 26, 2012 4:09 PM
Posted by: Richard Siddaway
PowerShell
If you’ve used PowerShell for any time you will be away of [int] meaning integer. One common use is in functions to define a parameter’s data type
function test1 {
param (
[int]$a,
[int]$b
)
$a * $b
}
We can use this function
PS> test1 -a 10 -b 6
60
OK simple stuff but what if we do this
PS> test1 -a 2147483648 -b 17
test1 : Cannot process argument transformation on parameter ‘a’. Cannot convert
value "2147483648" to type "System.Int32". Error: "Value was either too large
or too small for an Int32."
At line:1 char:9
+ test1 -a <<<< 2147483648 -b 17
+ CategoryInfo : InvalidData: (:) [test1], ParameterBindin…mati
onException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,test1
Oh
Integers come in a number of different sizes – denoted by the number of bits that are used to store the number – 16, 32 and 64 respectively. The standard [int] is a 32bit integer (4 bytes)
We can see the maximum and minimum numbers that can be stored in these data types using the MaxValue and MinValue properties
"`n16 bit integer"
"$([int16]::MinValue) to $([int16]::MaxValue)"
"`n32 bit integer"
"$([int32]::MinValue) to $([int32]::MaxValue)"
"`n32 bit integer alternative"
"$([int]::MinValue) to $([int]::MaxValue)"
"`n64 bit integer"
"$([int64]::MinValue) to $([int64]::MaxValue)"
which gives these results
16 bit integer
-32768 to 32767
32 bit integer
-2147483648 to 2147483647
32 bit integer alternative
-2147483648 to 2147483647
64 bit integer
-9223372036854775808 to 9223372036854775807
So 2147483648 is one bigger than the maximum value storable in 32 bit integer. We could use a 64bit integer or we can use an unsigned integer. This only contains positive values
"`nunsigned 16 bit integer"
"$([uint16]::MinValue) to $([uint16]::MaxValue)"
"`nunsigned 32 bit integer"
"$([uint32]::MinValue) to $([uint32]::MaxValue)"
"`nunsigned 64 bit integer"
"$([uint64]::MinValue) to $([uint64]::MaxValue)"
unsigned 16 bit integer
0 to 65535
unsigned 32 bit integer
0 to 4294967295
unsigned 64 bit integer
0 to 18446744073709551615
Which should you use? Use int64 if likely to have negative values and possibly uint32 if definitely only positive values
January 24, 2012 4:34 PM
Posted by: Richard Siddaway
PowerShell 3,
PowerShell v2,
Windows 2008 R2,
Windows 7One of the questions on tonight’s Live Meeting concerned the compatibility between remoting on PowerShell v2 and PowerShell v3 CTP 2
The difference is that v3 uses a WSMAN 3.0 stack but v2 uses 2.0
I used two machines:
- Windows 2008 R2 SP 1 with PowerShell v2
- Windows 7 SP1 with PowerShell v3 CTP 2
on each machine I ensured remoting was enabled then ran
$s = New-PSSession –ComputerName <other computer name>
Invoke-Command -Session $s -ScriptBlock {get-service}
it worked in both cases
Looks like in this case you can remote both ways
January 24, 2012 4:07 PM
Posted by: Richard Siddaway
PowerShell 3,
User GroupThe recording of tonight’s meeting together with the slides and demo scripts are available from
https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%212469&sc=documents
download the zip file from the 2012 January PowerShell v3 CTP2 overview folder
Enjoy
January 23, 2012 1:24 PM
Posted by: Richard Siddaway
PowerShell 3,
WMIGet-CimClass is used to dig into the information available within a WMI class.
At its most basic level we get a set of information like this
PS> Get-CimClass -ClassName Win32_OperatingSystem | fl *
ClassName : Win32_OperatingSystem
SuperClassName : CIM_OperatingSystem
CimSuperClassName : CIM_OperatingSystem
SuperClass : Microsoft.Management.Infrastructure.CimClass
CimSuperClass : Microsoft.Management.Infrastructure.CimClass
Namespace : ROOT/cimv2
Properties : {Caption, Description, InstallDate, Name…}
CimClassProperties : {Caption, Description, InstallDate, Name…}
Qualifiers : {Locale, UUID, dynamic, provider…}
CimClassQualifiers : {Locale, UUID, dynamic, provider…}
Methods : {Reboot, Shutdown, Win32Shutdown, Win32ShutdownTracker…}
CimClassMethods : {Reboot, Shutdown, Win32Shutdown, Win32ShutdownTracker…}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
We get a few parameters to work with
PS> Get-Help Get-CimClass
NAME
Get-CimClass
SYNTAX
Get-CimClass [[-ClassName] <string>] [[-Namespace] <string>] [-OperationTimeoutSec <UInt32>] [-ComputerName
<string[]>] [-MethodName <string>] [-PropertyName <string>] [-QualifierName <string>] [<CommonParameters>]
Get-CimClass [[-ClassName] <string>] [[-Namespace] <string>] [-OperationTimeoutSec <UInt32>] -CimSession
<CimSession[]> [-MethodName <string>] [-PropertyName <string>] [-QualifierName <string>] [<CommonParameters>]
Want to know which WMI classes have a method called create
PS> Get-CimClass -MethodName Create
NameSpace: ROOT/cimv2
ClassName Methods Properties
——— ——- ———-
Win32_ShadowStorage {Create} {AllocatedSpace, DiffVolume, MaxSpace, UsedSpace…}
Win32_ScheduledJob {Create, Delete} {Caption, Description, InstallDate, Name…}
Win32_DfsNode {Create} {Caption, Description, InstallDate, Name…}
Win32_BaseService {StartService, St… {Caption, Description, InstallDate, Name…}
Win32_SystemDriver {StartService, St… {Caption, Description, InstallDate, Name…}
Win32_Service {StartService, St… {Caption, Description, InstallDate, Name…}
Win32_TerminalService {StartService, St… {Caption, Description, InstallDate, Name…}
Win32_Share {Create, SetShare… {Caption, Description, InstallDate, Name…}
Win32_ClusterShare {Create, SetShare… {Caption, Description, InstallDate, Name…}
Win32_ShadowCopy {Create, Revert} {Caption, Description, InstallDate, Name…}
Win32_Process {Create, Terminat… {Caption, Description, InstallDate, Name…}
or a property called Size
PS> Get-CimClass -PropertyName Size
NameSpace: ROOT/cimv2
ClassName
———
Win32_DiskDrive
Win32_CDROMDrive
CIM_LogicalDisk
Win32_LogicalDisk
Win32_MappedLogicalDisk
Win32_DiskPartition
Win32_PrintJob
We can dig deeper into a class
Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Properties
provides an output like this for every property
Name : CSName
Value :
CimType : String
Flags : Property, ReadOnly, NullValue
Qualifiers : {CIM_Key, MaxLen, Propagated, read}
ReferenceClassName :
Likewise methods
Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Methods
or if you want detail on a particular method
PS> Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Methods | where name -eq SetDateTime | fl *
Name : SetDateTime
ReturnType : UInt32
Parameters : {LocalDateTime}
Qualifiers : {Implemented, Privileges, ValueMap}
And no thats not a typo on the where statement – its a new PowerShell v3 feature I’ll cover another day
Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Qualifiers
and
Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty CimSystemProperties | fl *
do what you would expect
Finding the key property for a class is a useful exercise
Get-CimClass -ClassName Win32_Process | select -ExpandProperty Properties | where {$_.Qualifiers -like "*key*"}
returns a number of properties – some are like this
Name : CreationClassName
Value :
CimType : String
Flags : Property, ReadOnly, NullValue
Qualifiers : {CIM_Key, MaxLen, read}
ReferenceClassName :
and have the CIM_Key qualifier but the one we are really interested in is this one
Name : Handle
Value :
CimType : String
Flags : Property, Key, ReadOnly, NullValue
Qualifiers : {key, MaxLen, read}
ReferenceClassName :
Lots of useful information to be gained from this cmdlet. Don’t leave home to explore WMI without it.