基本的にはこちらの記事の内容をかいつまんだ感じです。
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:今は含まれています