- What's new: Windows PowerShell? In this nugget I'm going to give
- you a very brief primer on what Windows PowerShell is and why
- it's such an awesome technology. PowerShell 2.0 is the current
- version of PowerShell as of this recording in early 2011 and
- it is indeed the default version of PowerShell that ships with
- Windows Server 2008 R2 and Windows 7. Specifically for this nugget
- we're going to focus on PowerShell commandlets for server administration
- in other words how do we manage roles and features with PowerShell
- and then we'll learn about the active directory module which
- gives us PowerShell interface to all of your common active directory
- management tasks. This is a lot of fun. Put on your thinking
- caps and let's get to work. Microsoft has kind of hit us over
- the head with PowerShell over the last handful of years. It used
- to be that command line or scripting administration in Windows
- was limited to creating what are called batch files using the
- cmd.exe, the command interpreter
- in Windows NT and later versions of Windows saving that as a
- .cmd or .bat file and you can go to town as far as automating
- your environment, doing log-on scripts for users, batch creating
- user group accounts this kind of stuff. Then more programmatically
- we evolved toward Visual Basic and the Scripting Edition of Visual
- Basic called appropriately enough VBScript. Now yes there are
- tons of other really nifty scripting languages out there that
- can be used very well for Windows Administration. One that comes
- to my mind is Python and if you have a CBT Nugget streaming subscription
- please check out the course that I created actually on Python
- Programming. It will take you from soup to nuts on how to use
- that programming language. PowerShell formally defined is the
- next generation shell environment and scripting language. Now
- those terms are packed with meaning, one person might define
- a shell one way, another person may define a scripting language
- another way. We're going to stick with Microsoft nomenclature
- of course because as you know with a Microsoft certification
- exam you're never going to see references to non-Microsoft products.
- You won't see any references to Python for instance. Microsoft
- and their TechNet website has a page called Windows PowerShell
- 2.0 glossary that I will be liberally quoting from in this nugget
- because I find their definitions to be really compact and useful.
- A shell environment, according to Microsoft, is a command interpreter
- that is used to pass commands to the operating system; that is
- to say we open up an elevated command prompt in Windows Server
- 2008 R2, type PowerShell, and we will find that our traditional
- C prompt changes to a PS prompt to let us know we are in the
- PowerShell shell. Another common question is what exactly is
- a scripting language. Now we don't need to get too geeky here
- in our definitions. Some basic differences between a scripting
- language like PowerShell of VBScript and say a full fledged.NET
- programming language like C Sharp or Java is that scripting languages
- tend to be much lighter than compiled programming languages,
- in other words you tend to just need nothing more than a simple
- text editor to create edit and run your scripts. They're meant
- just quick-in, quick-out optimized for automating frequently
- repeated tasks. Also scripting languages tend to run scripts
- through what's called an interpreter. An interpreter is a permanently
- installed code module on a system that takes that script to which
- as I said is a simple text file that contains line by line of
- your script code and interprets that code line by line. Now there
- are some stuff going on behind the scenes with PowerShell and
- .NET, those lines of script code get turned into Microsoft Intermediate
- Code or MSIL and then ultimately machine language but the ideas
- that scripting languages can be more agile because similarly
- to sticking a sheet of paper on a copier to make duplicates of
- it you can modify a script very quickly, run it against the interpreter,
- and you're done there's no linking, there's no compiling which
- can be slow with traditional programming languages. Those are
- a couple of the major differences that stem to mind. Bottom
- line take home message for your-649
- exam is that we as Windows Server Administrators can use PowerShell
- to do just about anything in Windows. And now only that, the
- folks at Microsoft who developed PowerShell did so with a very
- consistent, easy to learn syntax that relies upon what are called
- aliases. Now I'm starting to use some PowerShell specific terminology
- now and again not be Mr. Advertisement for CBT Nuggets but I
- have to tell you between you and me I watched far more CBT Nuggets
- training series than I record so that should tell you something
- I hope about the quality of training that CBT Nuggets offers.
- My CBT Nuggets colleague, Don Jones, has put together a couple
- of courses on Windows PowerShell so please check those out if
- you're looking for a deep dive into learning the technology. What
- I mean by this alias functionality in PowerShell is that you
- can run the PowerShell commandlet, Get-ChildItem
- to get a directory listing of your present working directory.
- But how many of us who come from Windows are accustomed to typing
- dir with appropriate switches to get a directory listing? As
- it happens in PowerShell 2.0
- dir is an alias for the PowerShell commandlet Get-ChildItem. Now
- you folks who come from Linux/UNIX environment you're not left
- out either, there are built in aliases in PowerShell 2.0 that
- cover common UNIX/Linux commands that is to say we can say ls
- to alias Get-ChildItem. PowerShell 2.0 is extensible. You can
- alias any commandlet in the entire library. Now I mentioned
- commandlet a lot but we haven't formally defined it. If you're
- going to know any vocabulary about the PowerShell Scripting Environment
- it is the commandlet. The commandlets are your building blocks
- in PowerShell. According to TechNet a commandlet is a task-oriented
- command that's used in the Windows PowerShell environment. You
- can't use commandlets outside of the PowerShell environment but
- they're extremely powerful because what commandlets are they
- seem to be just simple compound expressions where you have a
- verb like get or add then you have a dash and then you have some
- known command, in this case get-command is a really good PowerShell
- commandlet to understand because it's the alias of the Help function
- and allows you to get a run of all of the available commandlets
- in your session. If you have experience with .NET framework programming
- I will tell you that commandlets are actually specialized
- .NET classes. I hope that's impressive to you because what we
- have here with the .NET framework are hooks to any and every
- subsystem of not just your local server, your local computer,
- but any remote computer that you can reach. .NET framework as
- you know has been around for a long time and it is the programmatic
- engine that underlies Windows. Therefore commandlets are componentized
- .NET classes and classes in object-oriented programming terminology
- means nothing more than a blueprint for an object, that is this
- get-command commandlet may map under the hood to a .NET function
- that brings back all of the possible PowerShell commandlets that
- are available in your session so specifically in OOP terms when
- you run get-command in PowerShell you're instantiating an instance
- of the associated .NET class that exists in your PowerShell environment. Now
- how do you know or get to know commandlets? Well practice, practice,
- practice. You remember the old joke the person walking around
- New York City with a violin case? Here she asks somebody "Hey
- how do you get to Carnegie Hall?" and the person giving directions
- says "Practice, man, practice." Same thing with learning PowerShell
- commandlets, it's like anything outside find in IT, if you repeat
- certain commands enough they will become part of your intellectual
- muscle memory. That said Windows Server 2008 R2 gives us approximately
- 240 commandlets in our default built in library and because PowerShell
- is extensible you can load additional modules as they're called
- that give you yet more functionality, more commandlets. According
- to TechNet a Windows PowerShell module is a self-contained reusable
- unit that allows you to partition, organize, and abstract your
- PowerShell code. The module can contain commandlets, providers,
- functions, variables, and other types of resources that you can
- bring in as a single unit. In fact later in this nugget when
- we talk about the active directory module that's a perfect example.
- You're working in an ordinary PowerShell session, in order to
- access the commandlets that allow you to do active directory
- administration you're going to need to get the appropriate module,
- load it in, activate it, and you're off and running. In giving
- you some of the previous definitions I mentioned some other PowerShell
- specific buzz words like providers and hosts. In a nutshell what
- these mean friends a PowerShell provider is simply a hook into
- some aspect of your system. In other words PowerShell 2.0 in
- Windows has built in providers that give you access to the registry
- of the local system as well as the file system of the local system.
- A provider is nothing more than an interface that enables your
- PowerShell to hook into those subsystems. A host application
- on the other hand is a graphical user interface in many cases
- but not all. Sometimes for instance with SharePoint 2010 there's
- a host application called the SharePoint Management Shell that's
- nothing more than a command prompt window that when you launch
- the shortcut from your start menu it auto loads the appropriate
- modules, the appropriate SharePoint modules so you can immediately
- start using them. However two dramatic examples of a graphical
- user interface based PowerShell host would be the active directory
- administrative center as previously discussed and in Microsoft
- Exchange later versions the exchange management
- shell is a graphical interface that really just provides you
- the controls, the text boxes, the buttons, that sort of user
- interface flare and under the hood what's actually being generated
- are PowerShell commandlets. Whenever I think of PowerShell hosts
- it makes me think of how often history repeats itself in information
- technology. It seems like not too long ago at all that I found
- myself working in MS-DOS anybody remember that operating system?
- And then the first versions of Microsoft Windows. I remember
- Windows 3.1 was the version that really kind of took off before
- Windows 95 reinvented the graphical user interface. But anyway
- what always struck me years ago when I used Windows 3.1 is that
- as I was executing commands with my mouse by double left clicking,
- right clicking, etc. I was aware probably because I'm an IT geek
- that every command I was issuing was mapping to an underlying
- DOS command. So I might be in File Manager in Windows 3.1 and
- as I create a new directory in the graphical user interface by
- choosing the Menu option under the hood the MB command was being
- run in DOS. Similarly when we use a PowerShell host application
- it's the same idea I guess I've repeated that point enough, right? Even
- if you have used PowerShell a little bit so far or maybe a lot
- so far you need to understand the specific improvements in PowerShell
- 2.0 that are included with Windows Server 2008 R2 because you
- may very well see some of these references on your 649
- Certification Exam. One big improvement, actually the differences
- between PowerShell 1.0 and 2.0 are dramatic. I wouldn't even call
- them evolutionary. I would call them almost revolutionary. We
- have in PowerShell 2.0 a focus on remoting. This is a buzz word
- with software developers and all we're talking about with PowerShell
- remoting is the ability to do remote management, to touch remote
- file system or remote registry provider, or some other subsystem
- of a remote system through the PowerShell interface so this could
- be Windows 7, it could be Windows Server 2008 R2 standard installation,
- and also Server Core. That's actually a big deal and something
- that you might want to bookmark to do further reading on. The
- fact that Server Core in Windows Server 2008 R2 gives you a limited
- version of the .NET framework so it does give you those hooks
- into PowerShell and that of course factors into remoting. We'll
- talk more about that in a future nugget in this mini series where
- we discuss IIS 7.5 and ASP.NET websites. Next for those of us
- who maybe have more experience in a formal programming environment
- PowerShell 2.0 gives us a graphical script editor. It's called
- the PowerShell ISE. ISE stands for Integrated Script Editor and
- it's the same basic motif as an Integrated Development Environment
- or IDE. An example of an IDE would be Microsoft's own Visual
- Studio. The ISE is meant instead strictly for PowerShell. It's
- a really awesome tool. You'll see how it works in the upcoming
- demo. Not only does it give you a much more user friendly way
- to create PowerShell scripts but it also gives you some traditional
- IDE functionality like the ability to debug your code, also selective
- execution. You may have a script file that consists of 50 lines
- but you need to test just a particular sub-routine or a specific
- code block. You can actually do that and test that out all from
- within the PowerShell ISE. Remember that comes directly baked
- into PowerShell 2.0, you don't have to pay any extra money for
- it. Some other PowerShell 2.0 improvements include things like
- eventing and background jobs. Being able to use PowerShell as
- an automation engine where it doesn't even run as a foreground
- application. In a sense you could have PowerShell scripts running
- as a background service. Eventing deals with PowerShell's interface
- into the Windows Server 2008 event Schema. Now if you've seen
- my training on the 70-648 and 70-649
- exams I go into detail quite a bit on the use of the event log
- and in particular the notion of event log subscriptions, the
- WS protocols all that good stuff know that PowerShell now has
- hooks into eventing as well. Transactions and batching are terms
- that should be familiar to those of you who have done database
- development. A transaction is formally defined as an atomic unit
- of work that needs to either complete successfully 100% or fail
- 100%. And what's neat about transaction support in PowerShell
- 2.0 as well as in relational database management systems is that
- you can batch transactions together, it doesn't have to be each
- command is its own atomic unit, you can actually as a developer
- decide how many lines of code should be considered a single transaction. I
- think you're seeing the general theme here that Microsoft is
- improving PowerShell not so much in the user interface department
- because it's always been pretty intuitive but as Microsoft develops
- PowerShell it becomes more and more robust programming environment
- besides just a quick and dirty scripting tool. Finally we have
- the ability to extend PowerShell by first installing modules
- and then importing those modules into a PowerShell session. We're
- going to see this in living color as we discuss the active directory
- PowerShell module. As previously discussed the active directory
- module gives PowerShell 2.0 the ability to do what else but active
- directory administration. You might ask "Is this something you
- download from Microsoft? How do I get the Active Directory Module
- installed on my server?" The answer to that question is on your
- domain controllers as soon as you install either the active directory
- domain service or the active directory lightweight directory
- service or LDS server role the AD module becomes available immediately. And
- then in your session on those servers you can run the commandlet
- Import Module Active Directory and there you go, you're off and
- running. Some typical management tasks that we can do with the
- PowerShell AD Module include stuff like user and group management,
- managed service accounts which we discuss in this training and
- I've already given you the skinny on that, organizational unit
- administration, password policy, FSMO roles, and of course the
- very cool active directory recycle bin which I left off the list
- and I can't imagine why because it's such an awesome technology.
- I also mentioned that Server Manager has PowerShell capability.
- There's a PowerShell module specifically for Server Manager whereas
- the Active Directory PowerShell module is basically your nitty-gritty
- day to day active directory object manipulation PowerShell module
- for Server Manager which can be imported super, super easily
- import module server manager, hit Enter and you're done gives
- you an alternative to the nearing deprecation Server Manager
- cmd.exe. As discussed in the first nugget of my mini series
- the ServerManagerCmd is a monolithic executable command line
- program that allows you to manage Windows features and server
- roles. Microsoft is already flagging this guy for deprecation
- and is encouraging us to adopt PowerShell post haste so please
- make sure you do that. We don't have too many modules to worry
- about really it's either Get-Windows feature to get a list of
- all currently installed server roles and features, Add-Windows
- feature to of course add one, and Remove does just the opposite.
- And you'll note that we don't have separate commandlets for server
- roles and features. It can be somewhat confusing. Just know that
- there's a single commandlet to control them all. I think it reminds
- me of Tolkien one ring to rule them all no, this is something
- different. Windows feature deals with both server roles and features
- for the exam. Our demo for this nugget is all about as expected
- using PowerShell 2.0. I'm going to show you the integrated scripting
- environment as well as how to invoke PowerShell from an elevated
- command prompt. We'll work with the Active Directory and Server
- Manager modules to adjust server roles. We'll also look at Active
- Directory and Group Policy Administrations through PowerShell
- as well. This demonstration is all about PowerShell 2.0. Now
- again if you want from scratch training on PowerShell and you
- have a nuggetlab streaming subscription then by all means your
- best bet is to check out my CBT Nuggets colleague, Don Jones,
- training on PowerShell. Here we're just going to give you the
- information that you need to know, pass your Windows Server exams
- in particular the 649. We could always open up an elevated command
- prompt if we want to which I'll do right now just for grins and
- type PowerShell because as previously discussed our shell is
- baked into the R2 release of Windows Server 2008. You can tell
- that we're in the PowerShell environment as opposed to the command
- processor environment because we see PS prefixing our current
- path do you see what I mean? Now the difference between doing
- that starting a naked PowerShell session and starting from the
- Administrative Tools Active Directory Module for Windows PowerShell
- which I'm also going to pop open as an Administrator right now
- is that the Active Directory Module for PowerShell shortcut not
- only loads PowerShell, it also loads Active Directory Module. For
- instance I can bring back the commandlet Get module and it tells
- us we have Active Directory which is going to give us a lot of
- really nice features. Speaking of features if we want to add
- or remove or otherwise manage in those roles or features we're
- going to have to import another module. Let me back down to the
- root of drive C and clear the screen. We're going to run import
- module Manager. If I run Get module again we now see we have
- both Active Directory and Server Manager modules preloaded in
- our environment. We then can if we want to run Get command and
- focus on the noun part of the commandlets and look for commandlets
- that include Windows feature pretty straightforward. There's
- Add-WindowsFeature, there's Get-WindowsFeature, and Remove-WindowsFeature.
- Let's run Get-WindowsFeature and as you see here it gives us
- a standard command processor output, a fairly nice list of all
- possible server roles and features and you'll note that any that
- have the X to denote a selection are roles and features that
- are already installed on this local box dcnugget. And if you've
- been following these labs sequentially you'll already know that
- dcnugget has a DHCP Server, the DNS Server, File Services, Print
- and Document Services, etc. And when we get toward the bottom
- you'll see there are things that are not installed for instance
- the Telnet Server. Now I want to draw your attention not only
- to the left hand piece of this list that shows what's installed
- and what's not but I want you to see the second column because
- this is actually the PowerShell name for that component. Do you
- see what I mean? So again imagine if we wanted to install the
- Telnet Server on dcnugget. We're not going to use-let me scroll
- up just a little bit Telnet space Server. We're going to tell
- PowerShell that we want to install Telnet-Server
- just to bring that point. To add that feature in from the PowerShell
- environment is just as easy as doing an Add-WindowsFeature, Telnet-Server,
- and you can throw in restart if you feel that the server role
- is going to require a restart. I don't think we're going to need
- that for Telnet Server but I've been proven wrong before. Cool!
- Let's do the same thing with the Trivial File Transfer Protocol
- Client, TFTP-Client, Success on that two. So if we run Get-WindowsFeature
- again we should see that both of those services are now installed
- Telnet-Server and TFTP-Client and of course we'll see those listed
- in Server Manager as well. If we want to remove a Windows Feature
- you just do Remove-WindowsFeature
- TFTP-Client and you're good to go pretty straightforward stuff.
- All right then, now let's turn our attention to Active Directory
- Management through the Active Directory Module Proper. I'm going
- to run Get command and bring out all commandlets whose noun part
- includes ADGroup. And I hope you're seeing the motif here. Most
- of these commandlets start well all of them start with a verb
- but the verbs are fairly well standardized. Get is what you want
- to issue to retrieve information, to run kind of the equivalent
- of a Select statement if you're familiar with SQL; Add and New
- pretty familiar you're creating in a sense to kind of draw that
- line to SQL; Remove is similar to a Delete operation; and Set
- is where you're changing or modifying properties through a commandlet.
- Now let's imagine we want to create a new Active Directory Group
- for Read-Only domain controllers and we'll call this group RODC
- Admins, we're going to do this through PowerShell, and then after
- we finish the group we're going to add our student domain user
- to that group. Now how does this work? well as you can see here
- we have a built in commandlet called New-ADGroup. It takes a
- name parameter. Actually you know what? Let me step back you're
- probably thinking to yourself "Tim, how do you know all of the
- proper parameters that go with each of these commandlets?" Well
- the best commandlet to turn to in times of double is Get Help.
- So we can run Get-Help for New-ADGroup and you'll get back some
- really nice description. First a full run of its syntax, a description
- so you know what its purpose is, there are related links, and
- what I really like are the examples and it tells us right here
- to get examples of using that particular commandlet you would
- just run Get-Help, in this case New-ADGroup-examples
- and here they're giving us not one, not two, but three different
- examples. In fact we're going to do this first example, create
- a new group called RODC Admins in the container Users and set
- the group category, display name, grout scope, and description
- properties on the new object. For those of you who are still
- a little skeptical of PowerShell wondering how is this faster
- than going through the Active Directory Administrative Center
- my only answer to you is maybe you're not too comfortable with
- the command line. I tend to almost always find command line work
- faster than gooey work and number two remember again that PowerShell
- is eminently scriptable, I'll be showing you the ISE in just
- a moment, such that you can create with just some very limited
- copy and paste activity PowerShell scripts that can generate
- as many groups as you want, as many new users as you want, you
- can switch those users and groups around, you can manage organizational
- units, you can do just about anything under the sun with Active
- Directory through PowerShell scripting. All right, so back to
- our regularly schedules programming New-ADGroup the name or friendly
- name is going to be RODC Admins, it's security accounts manager
- name; it's short name in other words, samaccountname is RODC
- Admins; the group category is not a distribution but a security
- group; its GroupScope is Global remember we have local, global,
- universal, etc. I also want to pause here for a moment you'll
- notice that I'm not being particularly standardized with my capitalization
- it should come as good news to you I hope especially those of
- you who come from a Linux background that PowerShell commandlets
- and their associated parameters are not case-sensitive so I could
- type New-ADGroup in all upper, all lower, or mixed case and we're
- fine. It depends upon how strict you want to be in your shop
- with their conventions. All right, so we specified Global GroupScope,
- the display name RODC Administrators
- and then the LDAP path to the object in the Active Directory
- tree is going to be common name, users let me back up a little
- bit comma, DC equals nuggetlab comma DC equals com. Make sure
- you don't put extra spaces when you're doing your LDAP paths.
- All right, that showed up just fine. Let's come back into Active
- Directory Administrative Center, do a search for RODC. Let's
- come back into Active Directory Administrative Center, do a search
- for the string RODC and there is our RODC Admins group. Sweet!
- And sure enough it's located in the Users Container just like
- we wanted it to. To add a group member to that new group we can
- run the command Add-ADGroup member, identity in this case
- is the name of the group RODC Admins use the short name, the
- member is student. And come back to graphical interface, bring
- up the properties for our new RODC Admins, go to Members and
- there's Student. Easy-peasy, right? Excellent. Next let's take
- a look at PowerShell as a full pledged development language and
- to do that I'll open up the Search Box, type ISE this should
- bring up the shortcut for the Windows PowerShell Integrated Scripting
- Environment I'll open this up as an administrator and notice
- the split screen. It gives us a starter script called untilted1.ps1
- and then down below is our interactive window. When you issue
- commands in the interactive window the middle pan shows the output.
- It's a little bit clunky to get used to but if you want it displayed
- in a different way you'll note up here we can show the script
- pane at the top, that's the default, show the script pane at
- right, or show the script pane maximized. Why don't I show you
- a pre-created ps1 script file that I downloaded for fun and for
- free from the Microsoft TechNet Script Center? The Script Center
- and their Script Repository is definitely as must visit place
- for you if you're interested in integrating PowerShell into your
- Windows Administration. From the ISE I'll just use your traditional
- open commands and bring this guy in. This is a script called
- Resolve IP Address from Host Name, it was created by a guy named
- Ben Wilkinson and as you can see right off the top what we're
- doing here is creating a function where that function is actually
- the commandlet and then he goes in and defines the appropriate
- parameters that you can use with that commandlet. For instance
- you can pass in host name to specify a particular host. I guess
- that's going to be required. And then we can get back IPV6 addresses
- based on that host name and/or an IPV4 address pretty nice. To
- run a script once it's loaded just hit the Run command and what
- I'm going to do is come down to the bottom pane and run the commandlet
- slash function just like he presents it in his code. Get-IP address
- host name let's do dcnugget and in our output we get checking
- IP address and then it gives us both IPV6 and IPV4 addresses.
- If we just want to get one or the other back we can bring in
- the switch IPV4 only or IPV6 only. Finally let's run this against
- another host win nugget 10002 and if you don't put any parameters
- into the ISE, if I just were to do Get-IPAddress notice that
- we get a modal message box that's telling us we need to supply
- a value for at least the host name parameter and then we get
- our output. Now there is so much more to the ISE than I'm showing
- you right now. The ability to run Selections from a script where
- you could just run part of it, of course changing the display
- which we've already talked about, the debug menu where you can
- step over procedures, step into procedures, run and continue,
- you can stop, you can set break points to have your code go to
- a certain point, and then stop. In the edit menu we have a rich
- Find & Replace mechanism and then in the File Menu you can spawn
- additional tabs, you can save your script out under a different
- name really nifty lightweight development environment for PowerShell.
- I'm a big fan. We're going to finish this demo with a flourish
- by coming back to our PowerShell session. I'm going to import
- the Group Policy Module and let's run a Get command where the
- nouns include GP. And you'll find again it's very nice, the consistency
- built in to PowerShell that the noun portion of your commandlets
- will tend to start with a few letters that are indicative of
- the type of command it is. For instance commandlets that were
- associated with the Active Directory Module all began with AD.
- Here we're looking at the commandlets within the Group Policy
- Module and these all start with GP. I've used the SharePoint
- 2010 PowerShell Module quite a bit and I can tell you that their
- nouns start with SP, just a little bit extra to get you going.
- Let's run a Help statement Get-Help, Get-GPO let's see what that
- does. I'm just grabbing one at random. The description field
- tells us that the Get-GPO commandlet gets one GPO or all the
- Group Policy Objects in the domain. Well let's see some examples
- to see how usage works. A very final example looks good to me
- Get-GPO-All and then we targeted toward the domain so let's do
- Get-GPO-All-Domain nuggetlab.com. I haven't done much of anything
- with Group Policy yet so these are pretty standard. You have
- your default domain policy and the default domain controller's
- policy. It gives us some nice metadata here including the last
- modified date. What's new: Windows PowerShell Review? I hope
- you're as excited as I am about Windows PowerShell. It requires
- somewhat of a learning curve, that learning curve is significantly
- shortened if you have previous experience with scripting, but
- once you start to get your sea legs with PowerShell and start
- using those modules and commandlets for instance managing server
- roles and features and elements of Active Directory you're really
- going to see the benefit of using PowerShell to automate your
- work as a Windows Server 2008 R2 administrator. I hope that
- this has been informative for you and I'd like to thank you for.