September 18, 2011 8:51 AM
Posted by: Richard Siddaway
DNS,
PowerShell 3,
Windows 8There are a number of modules related to DNS
ModuleType Name
———- —-
Manifest DnsClient
Manifest DnsConfig
Binary DnsLookup
Manifest DnsNrpt
If we start with the DnsClient module we get these functions and cmdlets
Add-DnsClientNrptRule
Clear-DNSClientCache
Get-DNSClient
Get-DNSClientCache
Get-DnsClientEffectiveNrptPolicy
Get-DnsClientNrptGlobal
Get-DnsClientNrptRule
Get-DNSGlobalSettings
Get-DNSServerAddress
Remove-DnsClientNrptRule
Set-DNSClient
Set-DnsClientNrptGlobal
Set-DnsClientNrptRule
Set-DNSGlobalSettings
Resolve-DnsName
Knowing which DNS server the client is using
PS> Get-DNSServerAddress | select ElementName, Name
ElementName Name
———– —-
Virtual Wireless 192.168.2.1
isatap.{E962BF88-1194-44A8-B30B-A65A4772C812} 192.168.2.1
Virtual LAN 10.10.54.201
isatap.{EA0AB201-1381-4643-A67D-72C9C8860860} 10.10.54.201
Loopback Pseudo-Interface 1 fec0:0:0:ffff::1
Loopback Pseudo-Interface 1 fec0:0:0:ffff::2
Loopback Pseudo-Interface 1 fec0:0:0:ffff::3
and what the client has cached
Get-DNSClientCache | select Name, data
Name data
—- —-
server02 192.168.2.1
server02 10.10.54.201
server02 192.168.1.6
server02.manticore.org 192.168.2.1
server02.manticore.org 10.10.54.201
server02.manticore.org 192.168.1.6
watson.telemetry.microsoft.com
final one for the moment – is a replacement for nslookup
PS> Resolve-DnsName exch07
IP4Address : 10.10.54.130
Name : exch07.Manticore.org
Type : A
CharacterSet : Unicode
Section : Answer
DataLength : 4
TTL : 1200
September 17, 2011 9:44 AM
Posted by: Richard Siddaway
PowerShell v2,
User GroupQuick reminder about the UK User group Live Meeting on remoting and end points presented by PowerShell MVP Alexsandar Nikolic.
Details and link to join from http://msmvps.com/blogs/richardsiddaway/archive/2011/09/08/powershell-user-group-20-september-2011.aspx
Aleksandar talked about this at the recent PowerShell Deep Dive. This will be good!
September 14, 2011 1:57 PM
Posted by: Richard Siddaway
PowerShell v2,
WMIDmitry has just posted the video of the session I did at the PowerShell deep dive @ TEC in April
http://dmitrysotnikov.wordpress.com/2011/09/14/video-richard-siddaway-wmi-gems-and-gotchas/
The session was entitled WMI: Hidden Gems and Gotchas
Links to the slides and demo scripts are also available on the post
September 14, 2011 1:12 PM
Posted by: Richard Siddaway
PowerShellYou will have started to see blogs about Windows 8 and PowerShell 3 due to Microsoft releasing a developers preview version on MSDN. I’m currently building Windows 8 and Server 8 machines – more news when they are up and running
September 8, 2011 2:46 PM
Posted by: Richard Siddaway
PowerShell v2,
WMII have been asked about discovering the methods available on a WMI object. I’ve mentioned the GetMethodParameters method a few times but it can be difficult to find. Normally if we want to discover the methods on an object we would do this
Get-WmiObject Win32_Service | Get-Member -MemberType method
which gives this list
Change
ChangeStartMode
Delete
GetSecurityDescriptor
InterrogateService
PauseService
ResumeService
SetSecurityDescriptor
StartService
StopService
UserControlService
we will ignore the terminal services object that also appears
To dig into the underlying object we use .psbase (or Get-Member -MemberType method –View base)
(Get-WmiObject Win32_Service).psbase | Get-Member -MemberType method
gives us this list
Address
Clone
CopyTo
Equals
Get
GetEnumerator
GetHashCode
GetLength
GetLongLength
GetLowerBound
GetType
GetUpperBound
GetValue
Initialize
Set
SetValue
ToString
Note that the object type is System.Management.Automation.PSMemberSet
When we use Get-WmiObject we are looking at an instance of the WMI class. To look at the class itself
[wmiclass]"Win32_Service" | Get-Member -MemberType method
but this just shows a Create method
If we drop into the base object now
([wmiclass]"Win32_Service").psbase | Get-Member -MemberType method
we get
Clone
CompareTo
CopyTo
CreateInstance
CreateObjRef
Delete
Derive
Dispose
Equals
Get
GetHashCode
GetInstances
GetLifetimeService
GetMethodParameters
GetPropertyQualifierValue
GetPropertyValue
GetQualifierValue
GetRelated
GetRelatedClasses
GetRelationshipClasses
GetRelationships
GetStronglyTypedClassCode
GetSubclasses
GetText
GetType
InitializeLifetimeService
InvokeMethod
Put
SetPropertyQualifierValue
SetPropertyValue
SetQualifierValue
ToString
Which shows the Method we want and a few other potentially interesting methods to test out.
September 8, 2011 1:40 PM
Posted by: Richard Siddaway
PowerShell v2,
User Group
When: Tuesday, Sep 20, 2011 7:30 PM (BST)
Where:
*~*~*~*~*~*~*~*~*~*
Aleksandar Nikolic presents on PowerShell remoting and the customisation of remoting end points.
Aleksandar’s presentation at the PowerShell Deep Dive was excellent – don’t miss this one
Notes
Richard Siddaway has invited you to attend an online meeting using Live Meeting.
Join the meeting.
Audio Information
Computer Audio
To use computer audio, you need speakers and microphone, or a headset.
First Time Users:
To save time before the meeting, check your system to make sure it is ready to use Microsoft Office Live Meeting.
Troubleshooting
Unable to join the meeting? Follow these steps:
- Copy this address and paste it into your web browser:
https://www.livemeeting.com/cc/usergroups/join
- Copy and paste the required information:
Meeting ID: 3GJGF5
Entry Code: d6`S<^zjM
Location: https://www.livemeeting.com/cc/usergroups
If you still cannot enter the meeting, contact support
Notice
Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting.
September 6, 2011 11:29 AM
Posted by: Richard Siddaway
Active Directory,
PowerShell v2,
WMIQuick function to determine if a given machine is in a domain or workgroup
function test-domain{
[CmdletBinding()]
param (
[parameter(Position=0,
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string]$computer="."
)
BEGIN{}#begin
PROCESS{
Get-WmiObject -Class Win32_ComputerSystem -ComputerName $computer |
select Name, Domain
}#process
END{}#end
}
Feed the function a computer name or IP address and it will return the name and domain. If the computer is in the domain we get the full domain name – if its in a workgroup we get the workgroup name (WORKGROUP by default)
September 6, 2011 11:11 AM
Posted by: Richard Siddaway
PowerShell v2,
WMISometimes when we try to use Invoke-WmiMethod with an argument list we get an error
PS> Invoke-WmiMethod -Class Win32_Share -Name Create -ArgumentList "c:\test", "Test57", 0
Invoke-WmiMethod : Type mismatch
At line:1 char:17
+ Invoke-WmiMethod <<<< -Class Win32_Share -Name Create -ArgumentList "c:\test", "Test57", 0
+ CategoryInfo : InvalidOperation: (:) [Invoke-WmiMethod], ManagementException
+ FullyQualifiedErrorId : InvokeWMIManagementException,Microsoft.PowerShell.Commands.InvokeWmiMethod
Going back to basics this technique works – its how we did things in PowerShell and it still works great.
$s = [wmiclass]"Win32_Share"
$s.Create("c:\test", "Test57", 0)
As we have seen – this fails
Invoke-WmiMethod -Class Win32_Share -Name Create -ArgumentList "c:\test", "Test57", 0
According to the documentation the full list of the parameters for the method is:
Path
Name
Type
MaximumAllowed
Description
Password
Access
so we are really doing this
$path = "c:\test"
$name = "Test57"
$type = 0
$password = ""
$description = ""
$max = 100
$access = $null
$s = [wmiclass]"Win32_Share"
$s.Create($path, $name, $type, $max, $description, $password, $access)
when we did this
$s.Create("c:\test", "Test57", 0)
we were just ignoring the last four parameters.
BUT
if we look at the parameter list using
$s.psbase.GetMethodParameters("Create")
it shows the parameters in this order
Access
Description
MaximumAllowed
Name
Password
Path
Type
so this works
Invoke-WmiMethod -Class Win32_Share -Name Create -ArgumentList $access, $description, $max, $name, $password, $path, $type
If you get the Type mismatch error then its a good time to check the parameter order.
PS – I haven’t verified that the Invoke-WmiMethod expects the parameters in alphabetical order
September 5, 2011 12:45 PM
Posted by: Richard Siddaway
PowerShell v2,
WMI
Webcast: Get the most from PowerShell and WMI
I will be presenting the above webcast next week.
Date: Wednesday, September 7, 2011. Thats tomorrow
Time: 12:00 PM – 1:00 PM CDT
Thats 6pm UK time
Register for the web cast at
http://powershell.com/cs/media/p/11256.aspx