KEMBAR78
PowerShell crashcourse for sharepoint | PPTX
Windows PowerShellCrash Course forSharePoint AdministratorsDon JonesConcentrated Technology, LLChttp://concentratedtech.com
This slide deck was used in one of our many conference presentations. We hope you enjoy it, and invite you to use it within your own organization however you like.For more information on our company, including information on private classes and upcoming conference appearances, please visit our Web site, www.ConcentratedTech.com. For links to newly-posted decks, follow us on Twitter:@concentrateddon or @concentratdgregThis work is copyright ©Concentrated Technology, LLC
CAUTION: DEMOS AHEADThis is a demonstration-intensive session (very few slides)I will capture a shell transcript and save all of my scriptsYou can download these (in a week or so) from ConcentratedTech.com (there’s a “Conference Materials” link in the menu)
Welcome to the ShellWhy did Microsoft write PowerShell?Is this a replacement for Cmd.exe or VBScript?How much “scripting” do I need to learn?How long will PowerShell be around?What versions of Windows does it work with?What MS products are PowerShell-ed?
Command QuizChange directoriesMake a directoryGet a list of files and foldersDisplay contents of a text fileMove a fileCopy a fileDelete a file
Running CommandsRun all the commands you’re used to, with almost exactly the same syntax (Ping, Ipconfig, etc)New “cmdlets” have a more consistent naming convention and more consistent parameters… but they’re just commandsUse Help to read more; add –full or –examples for even more help; use wildcards to discover more commands and help topics
One Set of CommandsThe file system is a hierarchical data storeWhat other data stores does Windows use?Why not treat them as “disk drives” so that you can use the same set of commands?
Extending the ShellPSSnapins (the old way)Get-PSSnapin –registeredAdd-PSSnapinnameGet-Command –pssnapinnameModules (the new way)Get-Module –listavailableImport-Module nameGet-Command –module nameThere’s only one shell – the “pre-made shells” are just pre-loading a snap-in or module for you
PipingJust like Dir | MoreExport-, Out-, Format-, ConvertTo- are all useful verbs for pipingTip: Format- cmdlets go at the end of the pipeline. What they produce is only useful to Out-File, Out-Printer, Out-Host.
OutputRun Get-ProcessSee the resulting table?The real table, in memory, is much bigger – PowerShell just doesn’t show itPipe the table to Get-Member to see other available columnsOr pipe it to Format-List * (since a list can hold more data than a table)You don’t have to pipe stuff to a file and then grep it; you can simply refer to columns by name
More PipingSorting: Sort-Object (or “Sort”)Filtering: Where-Object (or “Where”)Grouping: Group-Object (or “Group”)Measuring: Measure-Object (or “Measure”)Use Format- cmdlets to specify the columns (called “properties”) that you’d prefer to see
Phys EdLet’s see the pipeline work in real life.Volunteers needed. You may win a prize.
How Pipeline input worksGet-Service generates what type of table (ok, these are really “objects” and not a “table in memory,” but it’s all just words)Get-Service | Get-MemberSo when you runGet-Service | Stop-Servicehow does Stop-Service know what to do with what you piped in?
Pipeline Input ByValueLook at the parameters of Stop-ServiceDo any of them accept pipeline input ByValue and accept the type of data being produced by Stop-Service?
Now Consider This“BITS”,”w32time” | Stop-ServiceThose are strings“BITS” | Get-MemberDoes Stop-Service accept anything of the type String ByValue from the pipeline?This would work too:Get-Content names.txt | Stop-ServiceWorld this work?Get-Process | Stop-ServiceHmmm…
Pipeline Input ByPropertyNameIf nothing will work ByValue, then the shell tries to match up input columns with parameter names ByPropertyNameLet’s look atGet-Process | Get-MemberDo any of those column names match up with parameter names of Stop-Service?Do the matching parameter names accept input from the pipeline ByPropertyName?
Debugging Pipeline InputTrace-Command-Name PipelineBinding-PSHost-expression { Get-Process | Stop-Service }
Fun trick!Import user info from a CSV and make new users out of them
WorkaroundsWhat about when pipelining won’t work?Get-WmiObject-class Win32_BIOS-computername (type names.txt)Get-WmiObject-class Win32_BIOS-computername (	Get-ADComputer –filter * |	Select –expand Name)
Remote ControlRequires PSH v2Run Enable-PSRemoting to enable(or via GPO) on machines that will accept incoming connectionsCommunicates over HTTP(s); authenticates with KerberosHelp about_remote* for more help
1:1, 1:n RemotingEnter-PSSession –computernamexExit-PSSessionInvoke-Command-scriptblock { command(s) }-computernamex,x,x,xNotes:PSComputerName propertyFilePath switch to do a whole script
More Options-credential-port-useSSLEtcOr create a persistent session using New-PSSession.Get the sessions with Get-PSSessionInvoke-Command –scr { whatever }-session (Get-PSSession)
Implicit RemotingStart a session (maybe save it in a $variable for ease of referring to it)Import a module in the remote sessionImport the remote session into the local shell – just the commands from that module, and add a noun prefixExecute remote commands as if they were local!
WMIGet-WmiObject-class whatever (e.g., “Win32_XXX”)-computername x,y,z-EA SilentlyContinue (why?)-Filter ”something” (why?)Let’s play with that…
Awesome Advanced TrickFormat-Table can accept a special item called a hashtable or dictionary as a property in a property listThe dictionary must contain two itemsN: The name of the column you want to createE: The value to go into the columnThis can even be an entirely new command!Use $_ to refer to whatever table row (object) is currentUse to combine WMI info from two classes into a single output! Crazy syntax, but crazy useful!
NOW… let’s do some Q&AI’ve got more demos to show you, but want to make sure I address your questionsAsk ‘em now!The remainder of the session will be additional demosRemember: Transcript will be downloadable; no need to copy down the syntaxAsk for a “reminder card” if you want to download this stuff next week.
Final Notes…Please be sure to submit a session evaluation form!Download slides & materials from www.ConcentratedTech.com within one week!Blog, URLs, and other information is also available at www.ConcentratedTech.com for your referenceTwitter me @concentrateddonMore resources at www.ShellHub.comThank you very much!
Your Feedback is ImportantPlease fill out a session evaluation form.Thank you!
This slide deck was used in one of our many conference presentations. We hope you enjoy it, and invite you to use it within your own organization however you like.For more information on our company, including information on private classes and upcoming conference appearances, please visit our Web site, www.ConcentratedTech.com. For links to newly-posted decks, follow us on Twitter:@concentrateddon or @concentratdgregThis work is copyright ©Concentrated Technology, LLC

PowerShell crashcourse for sharepoint

  • 1.
    Windows PowerShellCrash CourseforSharePoint AdministratorsDon JonesConcentrated Technology, LLChttp://concentratedtech.com
  • 2.
    This slide deckwas used in one of our many conference presentations. We hope you enjoy it, and invite you to use it within your own organization however you like.For more information on our company, including information on private classes and upcoming conference appearances, please visit our Web site, www.ConcentratedTech.com. For links to newly-posted decks, follow us on Twitter:@concentrateddon or @concentratdgregThis work is copyright ©Concentrated Technology, LLC
  • 3.
    CAUTION: DEMOS AHEADThisis a demonstration-intensive session (very few slides)I will capture a shell transcript and save all of my scriptsYou can download these (in a week or so) from ConcentratedTech.com (there’s a “Conference Materials” link in the menu)
  • 4.
    Welcome to theShellWhy did Microsoft write PowerShell?Is this a replacement for Cmd.exe or VBScript?How much “scripting” do I need to learn?How long will PowerShell be around?What versions of Windows does it work with?What MS products are PowerShell-ed?
  • 5.
    Command QuizChange directoriesMakea directoryGet a list of files and foldersDisplay contents of a text fileMove a fileCopy a fileDelete a file
  • 6.
    Running CommandsRun allthe commands you’re used to, with almost exactly the same syntax (Ping, Ipconfig, etc)New “cmdlets” have a more consistent naming convention and more consistent parameters… but they’re just commandsUse Help to read more; add –full or –examples for even more help; use wildcards to discover more commands and help topics
  • 7.
    One Set ofCommandsThe file system is a hierarchical data storeWhat other data stores does Windows use?Why not treat them as “disk drives” so that you can use the same set of commands?
  • 8.
    Extending the ShellPSSnapins(the old way)Get-PSSnapin –registeredAdd-PSSnapinnameGet-Command –pssnapinnameModules (the new way)Get-Module –listavailableImport-Module nameGet-Command –module nameThere’s only one shell – the “pre-made shells” are just pre-loading a snap-in or module for you
  • 9.
    PipingJust like Dir| MoreExport-, Out-, Format-, ConvertTo- are all useful verbs for pipingTip: Format- cmdlets go at the end of the pipeline. What they produce is only useful to Out-File, Out-Printer, Out-Host.
  • 10.
    OutputRun Get-ProcessSee theresulting table?The real table, in memory, is much bigger – PowerShell just doesn’t show itPipe the table to Get-Member to see other available columnsOr pipe it to Format-List * (since a list can hold more data than a table)You don’t have to pipe stuff to a file and then grep it; you can simply refer to columns by name
  • 11.
    More PipingSorting: Sort-Object(or “Sort”)Filtering: Where-Object (or “Where”)Grouping: Group-Object (or “Group”)Measuring: Measure-Object (or “Measure”)Use Format- cmdlets to specify the columns (called “properties”) that you’d prefer to see
  • 12.
    Phys EdLet’s seethe pipeline work in real life.Volunteers needed. You may win a prize.
  • 13.
    How Pipeline inputworksGet-Service generates what type of table (ok, these are really “objects” and not a “table in memory,” but it’s all just words)Get-Service | Get-MemberSo when you runGet-Service | Stop-Servicehow does Stop-Service know what to do with what you piped in?
  • 14.
    Pipeline Input ByValueLookat the parameters of Stop-ServiceDo any of them accept pipeline input ByValue and accept the type of data being produced by Stop-Service?
  • 15.
    Now Consider This“BITS”,”w32time”| Stop-ServiceThose are strings“BITS” | Get-MemberDoes Stop-Service accept anything of the type String ByValue from the pipeline?This would work too:Get-Content names.txt | Stop-ServiceWorld this work?Get-Process | Stop-ServiceHmmm…
  • 16.
    Pipeline Input ByPropertyNameIfnothing will work ByValue, then the shell tries to match up input columns with parameter names ByPropertyNameLet’s look atGet-Process | Get-MemberDo any of those column names match up with parameter names of Stop-Service?Do the matching parameter names accept input from the pipeline ByPropertyName?
  • 17.
    Debugging Pipeline InputTrace-Command-NamePipelineBinding-PSHost-expression { Get-Process | Stop-Service }
  • 18.
    Fun trick!Import userinfo from a CSV and make new users out of them
  • 19.
    WorkaroundsWhat about whenpipelining won’t work?Get-WmiObject-class Win32_BIOS-computername (type names.txt)Get-WmiObject-class Win32_BIOS-computername ( Get-ADComputer –filter * | Select –expand Name)
  • 20.
    Remote ControlRequires PSHv2Run Enable-PSRemoting to enable(or via GPO) on machines that will accept incoming connectionsCommunicates over HTTP(s); authenticates with KerberosHelp about_remote* for more help
  • 21.
    1:1, 1:n RemotingEnter-PSSession–computernamexExit-PSSessionInvoke-Command-scriptblock { command(s) }-computernamex,x,x,xNotes:PSComputerName propertyFilePath switch to do a whole script
  • 22.
    More Options-credential-port-useSSLEtcOr createa persistent session using New-PSSession.Get the sessions with Get-PSSessionInvoke-Command –scr { whatever }-session (Get-PSSession)
  • 23.
    Implicit RemotingStart asession (maybe save it in a $variable for ease of referring to it)Import a module in the remote sessionImport the remote session into the local shell – just the commands from that module, and add a noun prefixExecute remote commands as if they were local!
  • 24.
    WMIGet-WmiObject-class whatever (e.g.,“Win32_XXX”)-computername x,y,z-EA SilentlyContinue (why?)-Filter ”something” (why?)Let’s play with that…
  • 25.
    Awesome Advanced TrickFormat-Tablecan accept a special item called a hashtable or dictionary as a property in a property listThe dictionary must contain two itemsN: The name of the column you want to createE: The value to go into the columnThis can even be an entirely new command!Use $_ to refer to whatever table row (object) is currentUse to combine WMI info from two classes into a single output! Crazy syntax, but crazy useful!
  • 26.
    NOW… let’s dosome Q&AI’ve got more demos to show you, but want to make sure I address your questionsAsk ‘em now!The remainder of the session will be additional demosRemember: Transcript will be downloadable; no need to copy down the syntaxAsk for a “reminder card” if you want to download this stuff next week.
  • 27.
    Final Notes…Please besure to submit a session evaluation form!Download slides & materials from www.ConcentratedTech.com within one week!Blog, URLs, and other information is also available at www.ConcentratedTech.com for your referenceTwitter me @concentrateddonMore resources at www.ShellHub.comThank you very much!
  • 28.
    Your Feedback isImportantPlease fill out a session evaluation form.Thank you!
  • 29.
    This slide deckwas used in one of our many conference presentations. We hope you enjoy it, and invite you to use it within your own organization however you like.For more information on our company, including information on private classes and upcoming conference appearances, please visit our Web site, www.ConcentratedTech.com. For links to newly-posted decks, follow us on Twitter:@concentrateddon or @concentratdgregThis work is copyright ©Concentrated Technology, LLC