基本的にはこちらの記事の内容をかいつまんだ感じです。
https://technet.microsoft.com/en-us/windows-server-docs/compute/nano-server/powershell-on-nano-servertechnet.microsoft.com
まだ日本語に翻訳されてないみたいなので、自分の勉強がてらざっくりとまとめていきます。
そのうち翻訳されると思いますのでその際はこのエントリの内容も不要になるでしょう。
はじめに
本エントリの内容はWindows Server 2016 TP5およびGA版で確認しています。
製品版のWindows Server 2016、およびWMF 5.1が出る際はこのエントリの内容と違うことになっている可能性がありますので予めご了承ください。
PowerShellのエディションについて
PowerShell 5.1からプラットフォームに応じて以下の2つのエディションに分かれます。
Desktop Edition
所謂これまでのPowerShell。
Full Server/Server CoreやDesktop Windowsに搭載され、.NET Framework上で動作します。Core Edition
Nano ServerやWindows IoTに搭載されるサブセット版のPowerShell。
.NET Core上で動作します。
エディションの判別
PowerShell 5.1では$PSVersionTableにPSEditionプロパティが増え、DesktopまたはCoreが設定されるのでこの値を取得することでエディションの判別が可能になります。
PS C:\> $PSVersionTable Name Value ---- ----- CLRVersion 4.0.30319.34011 BuildVersion 10.0.14284.1000 PSVersion 5.1.14284.1000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} SerializationVersion 1.1.0.1 PSEdition Core
エディションの指定
requires -PSEditionステートメントでスクリプトを実行可能なエディションを指定できる様になるそうです。
指定例は以下。
#requires -PSEdition Core
モジュールとエディション
PowerShell 5.1からはモジュールのManifest keyにCompatiblePSEditionsというパラメーターが増え、モジュールがサポートするエディションを指定できる様になるそうです。
以下の様なコマンドで当該のエディションでサポートされるモジュールを取得できます...
Get-Module -ListAvailable | ? CompatiblePSEditions -Contains "Desktop"
が、Windows Server 2016 TP5で試した限りでは既存のモジュールにはこのパラメーターは設定されておらず、値を取得することはできませんでした。
【2016/09/27追記】
GA版でもこの点は変わっていませんでした。
Nano Server上のPowerShell
PowerShell CoreエディションではDesktopエディションに対して以下の機能が制限されています。
1. ADSI, ADO, and WMI type adapters
PowerShell CoreエディションにはADSI、ADO、WMI Type Adapterはありません。
これはADSI、ADO、WMI(V1)に関する機能が使えないという事も意味しています。
WMI(V1)が使えないという事は、Get-WmiObject等のWMI関連のコマンドレットが使えないという事で割と一大事なのですが、こちらに関してはCIM Type AdapterおよびCIM Cmdlet(Get-CimInstanceなど)が代わりに使え、古いWMI関連の機能を捨てる形となります。
2. Enable-PSRemoting, Disable-PSRemoting
Enable-PSRemotingとDisable-PSRemotingコマンドレットは使えません。
PSRemotingの設定はOSイメージ作成時に行うため削除されています。
3. Scheduled jobs and PSScheduledJob module
PSScheduledJobモジュールは使えず、Scheduled Jobの機能を利用することはできません。
なお、通常のJobは利用可能です。
4. Computer cmdlets for joining a domain
Add-Compurter、Remove-Computerコマンドレットは使えません。
ドメインへの参加はOSイメージ作成時に設定するため削除されています。
5. Reset-ComputerMachinePassword, Test-ComputerSecureChannel
Reset-ComputerMachinePassword、Test-ComputerSecureChannelコマンドレットは使えません。
ADSI Type Adapterが無いことに起因する感じでしょうか?
6. Profiles
PowerShell Coreエディションではプロファイルの機能が無くなり、$Profile変数も無くなっていました。
Nano Serverではコンソールログオンでの管理をあまり想定していない様なのでその影響を受けている感じでしょうか。
Set-PSSessionConfigurationを使ってリモート接続時にスタートアップスクリプトを実行するすることは可能です。
7. Clipboard cmdlets
クリップボード関連のコマンドレット(Get-Clipboard、Set-Clipboard)は使えません。
Nano Serverではクリップボードの使いどころが無いので当然といった感じです。
ちなみにclip.exeも無くなってました。
8. EventLog cmdlets
イベントログ関連のコマンドレット(Clear-EventLog、Get-EventLog、Limit-EventLog、New-EventLog、Show-EventLog、Remove-EventLog、Write-EventLog)は使えません。
代わりにGet-WinEventとNew-WinEventコマンドレットを使います。
単純に古いコマンドレットを捨てる形になる様です。
9. Get-PfxCertificate cmdlet
Get-PfxCertificateコマンドレットは使えません。
このコマンドレットは内部でSystem.Security.Cryptography.X509Certificates.X509Certificate2クラスを使っているのですが、このクラスが当初.Net Coreに含まれていなかった?*1ため使えない様に見受けられます。
【2016/12/27追記】
正確にいつなのかは不明なのですが、本日2016/12月の累積更新(KB3206632) を適用し、PowerShellのバージョンを 5.1.14393.1000 に上げたところGet-PfxCertificateが追加されていました。
リリースノートなどは出ていない様です。
10. TraceSource cmdlets
Get-TraceSource、Set-TraceSourceコマンドレットは使えません。
機能が削られた理由はよくわかりません。
11. Counter cmdlets
Get-Counter、Export-Counter、Import-Counterコマンドレットは使えません。
typeperfコマンドは使えますのでパフォーマンスカウンターに関してはこのコマンドで頑張る感じでしょうか?
12. Web-related cmdlets
Invoke-WebRequest、 Invoke-RestMethod、New-WebServiceProxy、Send-MailMessage、ConvertTo-HtmlといったWEBアクセスに関するコマンドレットは使えません。
Invoke-WebRequestと Invoke-RestMethodが使えないのは非常に痛いです。
【2016/09/27追記】
GA版でも追加されませんでした...
オープンソース版のPowerShell Core(6.0.0.alpha)ではInvoke-WebRequestと Invoke-RestMethodが追加されているので、もしかしたらGAに盛り込まれるやもと期待していたのですが残念です。
【2016/12/27追記】
正確にいつなのかは不明なのですが、本日2016/12月の累積更新(KB3206632) を適用し、PowerShellのバージョンを 5.1.14393.1000 に上げたところInvoke-WebRequestと Invoke-RestMethodが追加されていました。
リリースノートなどは出ていない様です。
13. Logging and tracing using PSDiagnostics module
PSDiagnosticsモジュールの機能を使ったロギングやトレースはできません。
14. Get-HotFix
Get-HotFixコマンドレットは使えません。
Nano ServerではManaging updates in Nano Serverにある様にWMIを使ってアップデート管理をする方針の様です。
15. Implicit remoting cmdlets
暗黙的なリモート処理を行うためのExport-PSSessionとImport-PSSessionコマンドレットは使えません。
暗黙的なリモートとは何かについてはこちらを参考にしてくだい。
16. New-PSTransportOption
New-PSTransportOptionコマンドレットは使えません。
機能が削られた理由はよくわかりません。
【2016/09/27修正】
GA版ではNew-PSTransportOptionコマンドレットが追加されていました。
17. PowerShell transactions and Transaction cmdlets
トランザクションは使えません。
トランザクションについては、正直使ってる人いるの?ってくらいの機能なので不要でしょう。
18. PowerShell Workflow infrastructure, modules, and cmdlets
ワークフローは使えません。
縄神様には申し訳ないですが残当。
19. Out-Printer
Out-Printerコマンドレットは使えません。
当然ですがOut-GridViewもありません。
20. Update-List
Update-Listコマンドレットは使えません。
理由はよくわかりませんが、単純に利用されないからでしょうか?
21. WMI v1 cmdlets
こちらについては1. ADSI, ADO, and WMI type adaptersで述べた通りです。
Nano ServerのWindows PowerShell Desired State Configuration
Nano ServerのDSCについては、Using DSC on Nano Server | Microsoft Docsを参考にすると良いでしょう。
こちらは日本語に翻訳済みで分かりやすくまとまっています。
*1:今は含まれています