980 likes | 1.36k Views
The Hidden Charms of Windows PowerShell 3.0 and 4.0. June Blender Senior Programming Writer Microsoft Corporation @ juneb_get_help juneb@microsoft.com. Today’s Topics. A Bit O’ History: How did we get to Windows PowerShell 4.0? Cool Features of Windows PowerShell 3.0
E N D
The Hidden CharmsofWindows PowerShell 3.0 and 4.0 June Blender Senior Programming Writer Microsoft Corporation @juneb_get_help juneb@microsoft.com
Today’s Topics • A Bit O’ History: How did we get to Windows PowerShell 4.0? • Cool Features of Windows PowerShell 3.0 • What’s in Windows PowerShell 4.0 Preview (beside DSC) • Windows PowerShell Help • Q & A
A bit o’ history…. • 2005: Windows PowerShell 1.0 • Out-of-band download • Included in Windows Server 2003 • 2009: Windows PowerShell 2.0 • Included: Windows 7 and Windows Server 2008 • WMF: Windows XP, Windows Server 2003 R2 • Microsoft .NET 2.5, 3, CLR 3 • 2012: Windows PowerShell 3.0 (Includes 2.0) • Included: Windows 8 and Windows Server 2012 • WMF: Windows 7, Windows Server 2008 • Microsoft .NET 4, 4.5, CLR 4 • Includes: Windows PowerShell 2.0 • 2013: Windows PowerShell 4.0 Preview • Included: Windows 8.1 and Windows Server 2012 R2 • WMF: Windows 7 SP1, Windows Server 2008 SP1, Windows Server 2012 • Microsoft .NET 4.5, CLR 4
A bit o’ history…. • 2005: Windows PowerShell 1.0 • Introduction to a .NET-based shell • 2009: Windows PowerShell 2.0 • Remote management • 2012: Windows PowerShell 3.0 • Coverage, Workflows • 2013: Windows PowerShell 4.0 • Control, DSC
Windows PowerShell 4.0 Preview • Windows PowerShell 4.0 • Included in Windows 8.1 and Windows Server 2012 R2 • Windows Management Framework 4.0for Windows 7, Windows Server 2008, Windows Server 2008 R2 • Requires .NET 4.5 (Get-ItemProperty -Name Release -Path 'HKLM:\Software\Microsoft\NET Framework Setup\NDP\v4\Full' • Windows 8, Windows Server 2012 • Upgrade to Windows 8.1, Windows Server 2012 R2 • Windows PowerShell 2.0 • Not included in Windows PowerShell 4.0 Preview • To install, use Server Manager or Programs in Control Panel
How to Get Windows PowerShell • Windows PowerShell 2.0 • Included in Windows 7 and Windows Server 2008 • Windows Management Framework 2.0for Windows XP, Windows Vista, Windows Server 2003 • Windows 8.1: Programs in Control Panel • Windows Server 2012 R2: Server Manager • Windows PowerShell 3.0 (Includes 2.0) • Included in Windows 8 and Windows Server 2012 • Windows Management Framework 3.0for Windows 7, Windows Server 2008, Windows Server 2008 R2 • Windows PowerShell 4.0 • Included in Windows 8.1 and Windows Server 2012 R2 • Windows Management Framework 4.0for Windows 7, Windows Server 2008, Windows Server 2008 R2
Cool Features in PowerShell Core 3.0 • The Basics • Simplified syntax • Getting properties and methods • Get-Command – Improved! • Module AutoLoading • Get-ChildItem – Improved! • Get-Help -ShowWindow • Show-Command • Map Network Drive • Unblock-File • ISE snippets • The Advanced Parts • Disconnected Sessions • Windows PowerShell Workflow • Scheduled Jobs • Dynamic Type Data • Updatable Help Windows PowerShell 3.0 includes Windows PowerShell 2.0 running side-by-side Get-Help
Simplified Syntax: {$_.} Avoid errors Make it work Make everyone successful
Simplified Syntax: ForEach-Object {$_.} PS 2.0: Get-Module | ForEach-Object {$_.NestedModules} PS 3.0: Get-Module | ForEach-Object NestedModules Get-Module | ForEach-Object {$_.NestedModules.Name} Get-Help ForEach-Object
Simplified Syntax: Where-Object {$_.} PS 2.0: Get-Process | Where {$_.ProcessorAffinity} Get-Process | Where {$_.BasePriority –gt 8} PS 3.0: Get-Process | Where ProcessorAffinity Get-Process | Where BasePriority –gt 8 Get-Help Where-Object
Get Properties… of multiple objects . PS 2.0: # One object (Get-Module PSScheduledJob).Name (Get-Module -ListAvailable).Name #Null PS 3.0: # One or more objects (Get-Module -ListAvailable).Name Get-Help about_Properties
Invoke Methods… of multiple objects PS 2.0: # One object # Multiple objects $a = ‘abc’ $b = ‘abc’, ‘def’ $a.ToUpper() $b.ToUpper() #FAIL PS 3.0: # One or more objects $a.ToUpper() $b.ToUpper() ABC ABC DEF Get-Help about_Methods
Count / Length… of a single object if ($p.Count –gt 0)… PS 2.0: # One object # Multiple objects 'abc'.Count ('abc', 'def').Count #Nothing 2 PS 3.0: # One object # Zero objects 'abc'.Count $null.Count 1 0 Get-Help about_Properties, about_Arrays
Get-Command • PS 2.0: • Gets commands in the current session. • PS 3.0: • Gets commands in all installed modules. • In PSModulePath environment variable • + current session Get-Help Get-Command
Module Auto-Loading Import-Module • PS 2.0: • Get-Module | Import-Module • PS 3.0: • Modules are imported automatically: • Use a command in the module • Get-Command (any command in the module) • Get-Help (any command in the module) • Modules are *not* imported automatically: • Get-Command * • Get-Help * • Not in PSModulePath environment variable Get-Help about_Modules
Module Auto-Loading “Gotcha” Import-Module PS C:\> Get-Job –JobNameMyScheduledJob # Nothing PS C:\> Get-ScheduledJobMyScheduledJob Id Name JobTriggers Command Enabled -- ---- ----------- ------- ------- 1 MyScheduledJob 1 Update-Help True PS C:\> Get-Job –JobNameMyScheduledJob Id Name PSJobTypeName State HasMoreData -- ---- ------------ ----- ----------- MyScheduledJobPSScheduledJob Completed True Get-Help about_Modules, about_Scheduled_Jobs
Get-ChildItem (dir) PS 3.0: New Parameters in FileSystem drives -File dir s* -af -Directory dirs* -ad -ReadOnlydirs* -af-ar -Hidden dirs* -ar-ah -System dirs* -as -Attributes dir-att !d,!d+h#No spaces D, R, H, S; !, +, “,” PS C:\> Dir *.ps1 –Attributes !r | attrib +r Get-Help Get-ChildItem -Path C:
Get-Help -ShowWindow Settings are saved. PS C:\> Get-Help Update-Help –ShowWindow Get-Help Get-Help
Get-Help –ShowWindow #Gotcha Displays only the first paragraph of parameter descriptions Get-Help Get-Help
Show-Command DEMO !! Get-Help Show-Command
Map Network Drive New-PSDrive -Persist PS 2.0: New-PSDrivecreates drives in the current session. PS 3.0: New-PSDrive –Persist creates mapped network drive. Get-Help New-PSDrive
Map Network Drive New-PSDrive –Persist • Root must be on a remote computer • Name must comply with Windows drive name standards (one letter) • User-specific, including “Run as administrator” PS C:\> New-PSDrive -Root \\Server01\PowerShell -Name P -PSProviderFileSystem-Persist Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- P 1148.67 248.54 FileSystem \\Server01\\PowerShell Get-Help New-PSDrive
Unblock-File • The Unblock-File cmdlet lets you open files that were downloaded from the Internet. • It unblocks Windows PowerShell script files that were downloaded from the Internet so you can run them, even when the Windows PowerShell execution policy is RemoteSigned. • Much better than changing the execution policy to Unrestricted. Get-Help Unblock-File
Unblock-File Get-Help Unblock-File
ISE Snippets • Creates a reusable text "snippet" in Windows PowerShell ISE. • Comes with built-in snippets • You can create your own snippets! • Snippet Cmdlets: • New-IseSnippet • Get-IseSnippet • Import-IseSnippet Get-Help New-ISESnippet
ISE Snippet "Gotchas" • Description parameter is required. • To view snippets, Ctrl-J or Edit/Start-Snippets or Right-click/Start Snippets • If you run New-IseSnippet in the console (not ISE), it works, but returns a InvokeMethodOnNull error that you can ignore. • To delete a user-created snippet, use Remove-Item PS C:\> Get-IseSnippet <title> | Remove-Item Get-Help New-ISESnippet
Create an ISE Snippet DEMO !!
What’s New in Core 3.0? • The Advanced Parts • Disconnected Sessions • Session Configuration Files • Windows PowerShell Workflow • Updatable Help • Scheduled Jobs • Dynamic Type Data Windows PowerShell 3.0 includes Windows PowerShell 2.0 !
Disconnected Sessions At work… • Start a PSSession. • Run commands in the PSSession. • [ Disconnect from the PSSession.] • Exit Windows PowerShell. • Shut down the machine. • Go home… • Boot up your laptop. • Start Windows PowerShell. • Reconnect to the PSSession. • Get the results of commands run in the session. At home… Get-Help about_Remote_Disconnected_Sessions
Disconnected Sessions • DISCONNECTED SESSION CMDLETS • New-PSSession: Creates a PSSession. • Disconnect-PSSession: Disconnects a PSSession. • Connect-PSSession: Connects to a disconnected PSSession. • Receive-PSSession: Gets the results of commands that ran in disconnectedsessions. • Get-PSSession: Gets PSSessions on the local computer or on remote computers. • Invoke-Command: InDisconnectedSessionparameter creates a PSSessionand immediately disconnects. Get-Help New-PSSession
PSSessions are session-independent • PS 2.0: • New-PSSession: Creates a connection from • the current session to another computer. • PS 3.0: • New-PSSession: Creates a connection that is • saved at the remote end, even if the current • Session is disconnected. Localhost To: Server01To: Server012 Server012 From: Server01From: Server012 From: Server02 Get-Help New-PSSession
Get-PSSession -ComputerName • PS 2.0: • Gets sessions in the current session that are connected to <ComputerName>. • PS 3.0: • Gets all sessions on <ComputerName> for the current user. • To get sessions in the current session, omit -ComputerName. Localhost To: Server01 To: Server012 Server012 From: Server01From: Server012 From: Server02 Get-Help Get-PSSession
Get-PSSession -ComputerName # On Server01 PS C:\> New-PSSession –ComputerName Server02 PS C:\> Get-PSSession –ComputerName Server02 Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 1 Session1 Server02 Opened Microsoft.PowerShellAvailable Server02 From: Server01 # On Server02 PS C:\> Get-PSSession Id Name ComputerNameState ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 1 Session1 Server02 Opened Microsoft.PowerShellBusy # On Server03 PS C:\> Get-PSSession –ComputerName Server02 Id Name ComputerNameState ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 1 Session1 Server02 DisconnectedMicrosoft.PowerShellBusy Get-Help Get-PSSession
How to Disconnect: • Disconnect-PSSession • Invoke-Command -InDisconnectedSession How to Connect / Reconnect: • Connect-PSSession • Receive-PSSession Get-Help about_Remote_Disconnected_Sessions
Disconnected Sessions#Gotchas Don’t exceed the IdleTimeout Set the BufferMode carefully • IdleTimeoutMs: How long a disconnected session can be idle before being deleted. Default value. • OutputBufferingMode: What happens to session output when the output buffer is full. • Values: • Block: Stop the command • Drop: Delete old output (FIFO) • MaxIdleTimeoutMs: The maximum idle timeout that is permitted by the session configuration. Get-Help about_Remote_Disconnected_Sessions
Disconnected Sessions DEMO !! Get-Help about_Remote_Disconnected_Sessions
Disconnected Sessions: How it WorksSession Configurations • PSSessions are saved in the session configuration ("endpoint") on the remote computer (aka "server-side") • A session configuration is a collection of settings that create the environment of sessions for remote users. • Under the covers, they are WSMan plug-ins. (dir WSMan:\<computer>\Plugin) • Every session uses a session configuration. If you don't specify one, you get the default, Microsoft.PowerShell • The ACL on the session configuration determines who can connect to the computer remotely. • You can use session configurations to create custom sessions for remote users. Get-Help about_Session_Configurations
Session ConfigurationsSession Configuration Files • To create a session configuration in Windows PowerShell 2.0, you need to write a C# program. • To create a session configuration in Windows PowerShell 3.0 (and later!), you use a session configuration file that contains a hash table. • Yes, you can create your own custom session configurations. It's easy! • New-PSSessionConfigurationFile -Path MySession.pssc • Register-PSSessionConfiguration -Name WithProfile -StartupScript C:\users\juneb\Documents\WindowsPowerShell\profile.ps1 Get-Help about_Session_Configuration_Files, New-PSSessionConfigurationFile
Scheduled Jobs Don’t exceed the IdleTimeout Set the BufferMode carefully • Scheduled jobs are a unique hybrid of Windows PowerShell background jobs and scheduled tasks. • Run asynchronously and in the background on the schedule that you specify. • Results of each job instance that runs are automatically saved and easily retrieved. • Use Job cmdlets to manage the running instances. • You can see scheduled jobs in Task Scheduler and manage them in Windows PowerShell. Get-Help about_Scheduled_Jobs
Scheduled Jobs Don’t exceed the IdleTimeout Set the BufferMode carefully • Trigger: New-JobTrigger: Sets the schedule. • Options: New-ScheduledJobOption: Set conditions for running the job. • Command that runs (script block / script) • Create the scheduled job: Register-ScheduledJob ("Run as administrator") Get-Help about_Scheduled_Jobs
Scheduled Jobs "Gotchas" • Run as administrator • Be mindful of the options. • Options use Task Scheduler default values. • Might prevent the task from running -- ever. • Read:Get-Help New-ScheduledJobOption –Parameter * Get-Help about_Scheduled_Jobs
Scheduled Jobs “Gotcha” PSC:\> Get-ScheduledJob PS C:\> # function elevate; “Run as administrator” PS C:\> Start-Process PowerShell –Verb RunAs PS C:\> Get-ScheduledJob Id Name JobTriggers Command Enabled -- ---- ----------- ------- ------- 1 UpdateHelp 1 Update-Help True Get-Help about_Scheduled_Jobs
Dynamic Type Data • Adds extended type data only to the current session • Much simpler than creating a Types.ps1xml file • TypeData Cmdlets • Update-TypeData -TypeName adds the type to the session • Update-TypeData-DefaultDisplayPropertySet changes the properties that are displayed by default • Get-TypeData gets the type data in the current session (static and dynamic) • Remove-TypeData deletes extended type data from the current session Get-Help Update-TypeData, about_Types.ps1xml
Dynamic Type Data PS C:\>Update-TypeData –TypeNameSystem.Management.Automation.PSModuleInfo-MemberNameSupportsUpdatableHelp-MemberTypeScriptProperty -Value {if ($this.HelpInfoUri) {$True} else {$False}} PS C:\>Get-Module -ListAvailable | Format-Table Name, SupportsUpdatableHelp Name SupportsUpdatableHelp ---- ------------------------------- Microsoft.PowerShell.Diagnostics True Microsoft.PowerShell.Host True Microsoft.PowerShell.Management True Microsoft.PowerShell.Security True PSDiagnostics False PSScheduledJob True TroubleshootingPack False Get-Help Update-TypeData, about_Types.ps1xml
Dynamic Type Data PS C:\>Update-TypeData -TypeNameSystem.DateTime -DefaultDisplayPropertySetDayOfWeek, Date, TimeOfDay PS C:\>Get-Date | Format-List DayOfWeek: Tuesday Date: 7/9/2013 12:00:00 AM TimeOfDay: 17:32:49:5829247 Get-Help Update-TypeData, about_Types.ps1xml
Updatable Help Don’t exceed the IdleTimeout Set the BufferMode carefully • Problem: Outdated help files • Help is continuously updated. Help XML files are part of Windows, so they're hard to update (trusted installer). • Online help is great, but users want updated help at the command line. • Solution: Updatable Help • Update-Help cmdlet downloads help files from the Internet and installs them (correctly!). • Compares versions and installs when a new one is available. Get-Help about_Updatable_Help
Updatable Help • Offline: Save-Help • Save-Help cmdlet downloads help files from the Internet and saves them in a file system directory. • Update-Help gets help from a file system directory and installs it (correctly!) • Multilingual Support • HelpInfo information files support a version for each locale. • Enhanced Online Help • Get-Help -Online works even when there are no help files on the box. • Autogenerated Help • Get-Help creates basic help when there are no help files online or on the box.
Update-Help Don’t exceed the IdleTimeout Set the BufferMode carefully • Figures out which modules support Updatable Help • Finds Updatable Help at an Internet site. • Compares versions • Downloads help package • Unpacks it • Verifies it • Installs it in the locale-specific subdirectory of the module directory. • To use the help, type Get-Help. • You don't need to restart Windows PowerShell. Get-Help Update-Help, about_Updatable_Help
Save-Help Don’t exceed the IdleTimeout Set the BufferMode carefully • Figures out which modules support Updatable Help • Finds Updatable Help at an Internet site. • Compares versions • Downloads help package to a specified <directory> • Update-Help -SourcePath <directory> • Checks version • Unpacks files • Verifies them • Installs them Get-Help Save-Help, about_Updatable_Help
Update-Help "Gotchas" Don’t exceed the IdleTimeout Set the BufferMode carefully • Must be Administrator to update help in $pshome (System32). • You might be interrupted by network • Some module don't support Updatable Help. • Look for HelpInfoUri property value • Updatable help hasn't been released or updated. • Online Help (-Online) isn’t supported. • Look for HelpUriproperty value Get-Help about_Updatable_Help