Jerry Lee Ford - Microsoft Windows PowerShell 2.0 Programming for the Absolute Beginner (2nd Ed) 2008 - Ch3

Ch. 3
Нам обязательно поможет в изучении Powershell
Listing тут

Как уже известно из гл.2, скрипт "Microsoft.PowerShell_profile.ps1" из $profile сможет подстроить отображение консоли по нашему желанию автоматически, при загрузке консоли. Причем делает он это, даже если его просто обозвать в profile.ps1
Чтобы это было для всех - кинуть сюда:
C:\Windows\System32\WindowsPowerShell\v1.0
C:\Windows\SysWOW64\WindowsPowerShell\v1.0

MS .NET framework - основа работы PowerShell. Это коллекции ресурсов, упрощающих разработку скриптов и программ путем предоставления доступа разработчикам  к коллекциям ресурсов и служб.  .NET ver. 2 - необх для PS ver1 и PS ver2.
.NET используют VB, C++, C#, J#
Компоненты .NET Framework:
   - .Net Framework Class Library
   - CLR (common language runtime)


Библиотека классов .NET
PS и .NET поддерживают работу со структурированными данными (строки, даты, целые, числа с плав. запятой, булевы и т.д.). Идеология:
     - структурированные данные группируются по коллекциям (классам),
     - классы используются как шаблоны при создании объектов (с определенным набором свойств)
     - объект содержит набор свойств/атрибутов и методов (функции характерные для объекта данного класса), определенных в классе (для PS file, folder, disk - объекты, значит имя - это свойство, а открытие, закрытие, удаление - метод)

CLR (common language runtime)
Обеспечивает перевод скрипта в исполняемый формат, понятный компьютеру. Обеспечивает:
- Компиляцию
- Безопасность
- Упр. памятью
- Обраб. исключений

PS предоставляет доступ к .NET посредством cmdlet-ов, при этом скрывая .NET классы, свойства. Остается только вызвать правильный cmdlet и передать выходные структурированные данные в следующий блок скрипта.
например Get-ChildItem - выведет список файлов или свойства файла, или определений в "env:" , но кроме этого .NET для этого cmdlet'а предоставляет дополнительные фичи: например возможность передать результат по конкретному файлу в cmdlet Get-Member с аргументом -MemberType, который может принимать различные значения, в нашем случае property:
Get-ChildItem .\Template.ps1 | Get-Member -MemberType Property (стр. 87)
Список свойств выдаваемый этой командой большой и не выдается по умолчанию Get-ChildItem .\Template.ps1,  но к нему можно обратиться:
Get-ChildItem .\Template.ps1 | Select-Object name, extension, directory (стр. 88)
Select-Object cmdlet
Также можно увидеть список методов объекта:
Get-ChildItem .\Template.ps1 | Get-Member -MemberType Method (стр. 89)

При этом как администратору Windows нет необхоидмости загоняться о .NET, надо осваивать командлеты. Краткое описание - Табл 3.1 (стр. 91-97) Полный список cmdlet'ов в текущей версии PS  Get-Command (тут)
Если есть желание заучить comandlet, то пожалуйста. Если нет - добро пожаловать в Get-Help (тут).

PS выполняет длительные задания в фоне. В том числе на удаленном ПК (здесь про WinRM) При старте такого задания отображается некоторое число-идентификатор объекта (фоновое задание), которое можно использовать для запроса статуса данного объекта "cmdletsto  retrieve information from network computers Get-Process, Get-Service, Get-EventLog,  and  Get-WMIObject. These commands do so by invoking .NET methods, do  not  rely  on  Windows  PowerShell’s remoting’s infrastructure." - стр. 99
При этом задание выполняется в некотором "runspace", который может быть temporary (временным) или persistant (постоянным) - стр. 99
При этом persistant runspace позволяет обращаться к переменным из этого runspace разным скриптам.
PS2.0 предлагает 7 cmdlets для работы с фоновыми заданиями (стр. 99):
About-PSJob. Provides a high-level overview of how to work with background jobs. (PS5 - нет)
Start-PSJob. Creates and executes a new local or remote background job. (PS5 - Start-Job)
Receive-PSJob. Retrieves output generated by a background job. (PS5 - Recieve-Job)
Wait-PSJob. Instructs Windows PowerShell to wait for a background job to complete. (PS5 - Wait-Job)
Stop-PSJob. Halts the execution of a background job. (PS5 - Stop-Job)
Get-PSJob. Retrieves information about the status of a background job. (PS5 - Get-Job)
Remove-PSJob. Deletes a background job object (including all of its output). (PS5 - Remove-Job)

New-Runspace - для создания persistant runspace используется cmdlet.

Для PS5 
Get-Command -noun Job | Select-Object -Property Name
или
PS C:\WINDOWS\system32> get-help *Job* | Select-Object name, category, Synopsis
Name                   Category Synopsis
----                   -------- --------
Debug-Job              Cmdlet   Debugs a running background, remote, or Windows PowerShell Workflow job.
Get-Job                Cmdlet   Gets Windows PowerShell background jobs that are running in the current session.
Receive-Job            Cmdlet   Gets the results of the Windows PowerShell background jobs in the current session.
Remove-Job             Cmdlet   Deletes a Windows PowerShell background job.
Start-Job              Cmdlet   Starts a Windows PowerShell background job.
Stop-Job               Cmdlet   Stops a Windows PowerShell background job.
Wait-Job               Cmdlet   Suppresses the command prompt until one or all of the Windows PowerShell background ...
Resume-Job             Cmdlet   Restarts a suspended job.
Suspend-Job            Cmdlet   Temporarily stops workflow jobs.

Пример 
для PS2:
Start-PSJob -command "Get-Service" 
для PS5:
Start-Job -ScriptBlock {Get-Service}

Для удаленного выполнения PS2 задания допишем:
Start-PSJob -ScriptBlock {Get-Service} -computername XYZ
XYZ - hostname, UNC name, or IP addr, для нескольких ПК добавляем их через "," - стр. 100
В PS5 - это не модно (ссылка на хабре) Удаленные подключения
1. Сессии 1-to-1 - зашел, выполнил, ушел
Enter-PSSession -ComputerName Test
2. Сессии 1-to-many
Invoke-Command
определяем что будем исполнять так:
$sb = { команды для удаленной машины разделенные точкой с запятой }
передаем на удаленные машины Test1 и Test2
Invoke-Command -ComputerName Test1, Test2 -ScriptBlock $sb -Credential
за раз можно забросить на 32 машины. Если альтернативные кредиталы то используем параметр -Credential