Operations Lab.

Posts Tagged ‘Windows Server 2016

Network Controller の API に関するドキュメントの在処

leave a comment »

いつもどこにリファレンスがあるか分からなくなるのでメモ。API の在処はページ末尾に直リンクを記載しています。

Microsoft のプロトコル仕様等のドキュメント

プロトコルやインタフェースに関するドキュメントは MSDN にまとめられていますが、必要な時にたどり着けない(見つけられない)ことが多い気がします。「Protocol」ドキュメント階層へのナビゲーションも含めて、メモします。

MSDN での辿り方

MSDN のトップページから辿る場合、日本語版のページからではほぼたどり着けません。英語版に切り替えてからリンクを辿っていきます。(表示や階層は随時変更される可能性がありますので、2016/12/18 時点での情報です。)

  1. MSDN のトップページへアクセスします。(日本語でも英語でも OK)
  2. 「ドキュメント」の「API とリファレンス」を選択します。
    msdn-161219-01msdn-161219-02
  3. MSDN ライブラリが表示されるので、「Microsoft API とリファレンスのカタログ(Microsoft API and reference catalog)」で「ライブラリ TOC 表示に切り替える(Switch to Library TOC view)」を選択します。
    msdn-161219-03msdn-161219-04
  4. ライブラリ TOC が日本語で表示されている場合は、URL を書き換えて英語版のページを表示します。
    変更前:https://msdn.microsoft.com/ja-jp/library/ms310241
    変更後:https://msdn.microsoft.com/en-us/library/ms310241
    msdn-161219-05
    ※日本語版と英語版で TOC の中身が異なっており、英語版にしかリンクが存在しません。
  5. 左メニューで「Open Specifications」を選択します。
    msdn-161219-06
  6. 「Protocols」を選択します。
    msdn-161219-07
  7. 「Windows Protocols」を選択します。全ての仕様書を一括でダウンロードしたい場合は、ページ下部に一括ダウンロードのリンクがあります。
    msdn-161219-08
  8. 「Windows Technical Specifications」を選択します。
    msdn-161219-09
  9. プロトコルやインタフェースの仕様に関するドキュメントが一覧で表示されます。
    msdn-161219-10

Network Controller の Northbound API

Network Controller の API については、以下にドキュメントがあります。前述の手順で(も)辿れます。

2016/09/26 時点での最新版は ver.2.0 です。PDF 及び DOCX 形式でのダウンロードも可能です。(直リンク)

Written by kazu

2016/12/19 at 00:18

Windows Server 2016 Nano Server と日本語環境

leave a comment »

Windows Server 2016 が RTM となり、評価版がダウンロードできるようになりました。

結論

日本語版 Nano Server を使用するのは時期尚早です。やめましょう。

どうしても利用したい方は、以下を理解したうえで自己責任でどうぞ。

日本語版で困ること

Nano Server のイメージを作成する際に、静的 IP アドレスを正しく設定できない

New-NanoServerImage で IPv4Address などを指定しても、IP アドレスが設定されません。DHCP を使用する場合は問題ありませんが、静的アドレスを使用したい場合は、Recovery Console 側で設定操作が必要です。

Recovery Console が文字化けする

Recovery Console は日本語対応していないため、日本語で出力される部分はもれなく文字化けします。例えば、時刻表示やネットワーク インタフェース名、Windows Firewall のルール名などが文字化けします。

img002618img002625

RTM の Nano Server では Recovery Console でできることが増えているため、相対的に不便さ倍増です。

新規に作成した Gen 2 仮想マシンが存在すると、仮想マシン管理サービスがクラッシュする

Hyper-V の役割をインストールして Hyper-V ホストとして使用することを考えている方も多いと思いますが、日本語版 Nano Server 上で新規に Gen 2 仮想マシンを作成し、PowerShell 上で Get-VMFirmware を実行すると、Hyper-V 仮想マシン管理サービス(Hyper-V Virtual Machine Management Services / vmms)がもれなくクラッシュします。

Gen 2 仮想マシンの状態や、セキュアブートの設定には依存しません。VM が停止状態であっても、セキュアブートが無効に設定されていてもクラッシュします。(これはおそらく、セキュアブート テンプレートに不整合が発生しているためと思われます。(次項参照))

vmms がクラッシュしても仮想マシンは停止しませんが、Hyper-V マネージャや PowerShell などから管理ができなくなります。

Gen 2 仮想マシンのセキュアブート テンプレートを変更できない

日本語 Nano Server 上で新規に Gen 2 仮想マシンを作成すると、セキュアブート テンプレートを選択するリストが表示されないため、テンプレートを選択できません。また、この状態で仮想マシンの電源をオンにすると、セキュアブートテンプレートの互換性に問題がある旨、警告が表示されます。

英語版 Nano Server

img002639

日本語版 Nano Server

img002640

img002641

なんとなく、セキュアブート テンプレートが壊れているか、内部的に不整合な状態になっている気がします。

デフォルト タイムゾーンが US に設定される

日本語版イメージを作成すると、言語環境や時刻、通貨表記などは日本語(日本環境)になりますが、タイムゾーンは米国およびカナダ(UTC-8)が設定されます。(いっその事すべて US 環境がデフォルトなら問題は少なかったかもしれないのに…。)

img002629

なお、タイムゾーンは起動後にコマンドで変更できますので、大きな問題ではありません。

最後に

Nano Server は、他の Windows Server 2016 (Core / Desktop)と異なり CBB (Current Branch for Business)で提供されます。(Windows Server は LTSB ; Long Term Service Branch)で提供されるため、不具合の改修やアップデート(に伴う仕様変更)も早いと思われます。

もう少ししたら、日本語版でも問題なく利用できるようになるかもしれません。

Written by kazu

2016/09/27 at 04:41

Windows 10 with Hyper-V で NAT を使用する

leave a comment »

※ このポストで取り扱っている NAT は、内部ネットワークから外部へ通信を行う際の Source NAT(SNAT)です。実際はポート変換も実行されるため、SNAPT (Source Network Address/Port Translation)になります。

Windows 10 Anniversary Update (Version 1607)で、Hyper-V 上の仮想マシンが外部へ通信する際に NAT を行うことが(標準の機能のみで)できるようになりました。

いままでは

Hyper-V の機能、または仮想スイッチの機能としては NAT を行うことができなかったため、仮想マシンが外部と通信を行う場合は、以下何れかの方法で外部通信を実現していました。

  • 外部(External)仮想スイッチで直接外部に接続する
  • Hyper-V ホストで、「インターネット接続共有」(クライアント OS の場合)または「ルーティングとリモートアクセス」の役割(サーバー OS の場合)を構成する
  • (NAT 用の VM を作成して、NAT を適用する)
    ※この方法は、結局他の方法で NAT VM を外部接続させる必要があります。

ノート PC などで、Hyper-V ホストの外部インターネットアクセスが無線 LAN アダプターとなっているような環境では、External スイッチへ VM を直接接続しても正しく通信が行えない(※)ため、ホスト側で「インターネット接続共有」を有効化して使用していた方も多いと思います。

※ External 仮想スイッチの場合、VM の MAC アドレスは変換されない(VM の仮想 NIC に付与された MAC アドレスで通信を行う)ため、無線アクセスポイントとの通信が正しく行えません。

今回の機能(Hyper-V 仮想スイッチでの NAT)により、無線 LAN 環境下であっても、インターネット接続共有や RRAS を使用せず外部へ通信できるようになります。

利用するには

Hyper-V の機能が有効化された Windows 10 Build 14295 が必要です。Windows 10 Anniversary Update は Build 10393 なので利用することができます。Windows Server 2016 でも(リリースされれば)利用できると思われます。(サーバー OS に無線 LAN アダプターを接続する人は少ないと思いますので、直接的な恩恵は少ないと思いますが。)

注:後述の通り、NAT スイッチには制限があるため、サーバー(システム)環境で多数のセグメントを収容し、NAT を行いたい場合は、今まで通り RRAS を使うか NAT 用の VM (仮想アプライアンス)を使用したほうが良いと思います。

設定方法

以下の流れで設定します。

  1. Hyper-V ホスト側に外部通信可能なインタフェースを用意し、IP アドレスを設定する(ホストが外部通信できる状態にする)
  2. 「内部」の(Internal タイプの)仮想スイッチを作成する
  3. ホスト OS 上に作成された(Internal 仮想スイッチに接続された)仮想 NIC (vEthernet)に IP アドレスを設定する
  4. (仮想 NIC に設定した IP アドレスをレンジに含む)NAT ネットワークを設定する

ホスト側の外部通信可能なインタフェース

これは、通常通りホスト上で IP アドレスをアサインし、ホストが外部通信可能であれば OK です。外部通信用の NIC を仮想スイッチにバインドする必要はありません。

Internel vSwitch の作成

Hyper-V マネージャーまたは PowerShell で仮想スイッチを作成します。このとき、SwitchType に Internal (内部)を指定します。

※ PowerShell で作業を行う場合は「管理者として実行」します。(以下同様)

下記の例では、「Internal」という名前の内部(Internal タイプの)仮想スイッチを作成しています。(名前は他の仮想スイッチと重複しなければ何でも OK 。)

PS C:\> New-VMSwitch -Name Internal -SwitchType Internal

Name      SwitchType NetAdapterInterfaceDescription
----      ---------- ------------------------------
Internal  Internal

PS C:\> Get-VMSwitch -Name Internal | fl *

Name                                : Internal
Id                                  : c51a5bd2-c53c-48f0-af9d-742f477fbfec
Notes                               :
Extensions                          : {Microsoft Windows フィルタリング プラットフォーム, Microsoft NDIS キャプチャ}
BandwidthReservationMode            : Absolute
PacketDirectEnabled                 : False
EmbeddedTeamingEnabled              : False
IovEnabled                          : False
SwitchType                          : Internal
AllowManagementOS                   : True
NetAdapterInterfaceDescription      :
NetAdapterInterfaceDescriptions     :
IovSupport                          : False
IovSupportReasons                   :
AvailableIPSecSA                    : 0
NumberIPSecSAAllocated              : 0
AvailableVMQueues                   : 0
NumberVmqAllocated                  : 0
IovQueuePairCount                   : 0
IovQueuePairsInUse                  : 0
IovVirtualFunctionCount             : 0
IovVirtualFunctionsInUse            : 0
PacketDirectInUse                   : False
DefaultQueueVrssEnabledRequested    : True
DefaultQueueVrssEnabled             : False
DefaultQueueVmmqEnabledRequested    : False
DefaultQueueVmmqEnabled             : False
DefaultQueueVmmqQueuePairsRequested : 16
DefaultQueueVmmqQueuePairs          : 0
BandwidthPercentage                 : 0
DefaultFlowMinimumBandwidthAbsolute : 0
DefaultFlowMinimumBandwidthWeight   : 0
CimSession                          : CimSession: .
ComputerName                        : TAKAI02
IsDeleted                           : False

PS C:\>

Internal vSwitch のホスト側仮想インタフェース(vEthernet)に IP を設定

コントロールパネル(ネットワーク接続)または PowerShell で、ホスト側に作成された仮想 NIC に IP アドレスを設定します。ここで指定した IP アドレスが、VM から見た時の GW アドレスになります。

※ 上記ホスト側仮想 NIC にはデフォルトゲートウェイを設定する必要はありません。

下記の例では、192.168.137.1/24 をホスト側の仮想 NIC へアサインしています。(192.168.137.0/24 はインターネット接続共有で使用される IP アドレスレンジなので、競合する場合は他のレンジを使用したほうが良いでしょう。)

PS C:\> Get-NetAdapter | ft Name,ifIndex,InterfaceDescription,Status

Name                       ifIndex InterfaceDescription                     Status
----                       ------- --------------------                     ------
Bluetooth ネットワーク接続      20 Bluetooth Device (Personal Area Network) Disconnected
vEthernet (Internal)            12 Hyper-V Virtual Ethernet Adapter         Up
Wi-Fi                            3 Intel(R) Dual Band Wireless-AC 7260      Up

PS C:\> New-NetIPAddress -InterfaceIndex 12 -AddressFamily IPv4 -IPAddress 192.168.137.1 -PrefixLength 24

IPAddress         : 192.168.137.1
InterfaceIndex    : 12
InterfaceAlias    : vEthernet (Internal)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 192.168.137.1
InterfaceIndex    : 12
InterfaceAlias    : vEthernet (Internal)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Invalid
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : PersistentStore

PS C:\> Get-NetIPAddress -InterfaceIndex 12

IPAddress         : fe80::103e:d542:892c:f48c%12
InterfaceIndex    : 12
InterfaceAlias    : vEthernet (Internal)
AddressFamily     : IPv6
Type              : Unicast
PrefixLength      : 64
PrefixOrigin      : WellKnown
SuffixOrigin      : Link
AddressState      : Preferred
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 192.168.137.1
InterfaceIndex    : 12
InterfaceAlias    : vEthernet (Internal)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Preferred
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

PS C:\>

NAT ネットワークの設定

ホスト側で PowerShell を使用し、NAT ネットワークを作成します。New-NetNat コマンドに Name (ネットワーク識別名)と InternalIPInterfaceAddressPrefix (NAT 対象となるネットワークプレフィックス)を指定するだけです。

下記の例では、「VMNatNetwork」という名前の NAT ネットワーク(設定)を作成しています。InternalIPInterfaceAddressPrefix に指定した 192.168.137.0/24 からの通信が NAT 対象となります。

PS C:\> New-NetNat -Name VMNatNetwork -InternalIPInterfaceAddressPrefix 192.168.137.0/24

Name                             : VMNatNetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.137.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True

PS C:\> Get-NetNat | fl *

Store                            : Local
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpInboundRefresh                : False
Active                           : True
Caption                          :
Description                      :
ElementName                      :
InstanceID                       : VMNatNetwork;0
ExternalIPInterfaceAddressPrefix :
IcmpQueryTimeout                 : 30
InternalIPInterfaceAddressPrefix : 192.168.137.0/24
InternalRoutingDomainId          : {00000000-0000-0000-0000-000000000000}
Name                             : VMNatNetwork
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
UdpIdleSessionTimeout            : 120
PSComputerName                   :
CimClass                         : root/StandardCimv2:MSFT_NetNat
CimInstanceProperties            : {Caption, Description, ElementName, InstanceID...}
CimSystemProperties              : Microsoft.Management.Infrastructure.CimSystemProperties

PS C:\>

InternalIPInterfaceAddressPrefix は、Internal vSwitch に接続されたホスト側の仮想 NIC にアサインした IPアドレスを含んでいる必要があります。例えば、ホスト側の仮想 NIC に 192.168.0.1/24 を設定した場合、InternalIPInterfaceAddressPrefix には 192.168.0.0/24 などを指定します。

※ NAT 先の IP アドレス(所謂、External IP Address)は指定しません。動的に決定されます。

制限事項

何れも現時点においての制限事項です。(将来どうなるかは不明です。)

  • NAT ネットワークは複数作成できません。複数作成すると意図しない動作をする可能性があります。
  • Windows Container (docker)を使用すると、NAT タイプのネットワークが自動的に作成されます。コンテナと併用する場合は、自動的に作成された NetNat を流用するか、一度 NAT 定義を削除した後両方をカバー可能な広いレンジの NAT ネットワークを定義してください。
  • NAT を行うインタフェースは指定できません。IP アドレスから動的に解決されます。

参考

Hyper-V の Guest OS Support に対する考え方

leave a comment »

公式なドキュメントが公開された場所に無い気がするのですが、とりあえずメモ。

Hyper-V 上で Windows OS を Guest として動作する場合

ホスト OS よりも 2 世代以上新しい OS は、ゲストとしてサポートされません。言い換えると、ゲスト OS のバージョンより(少なくとも)1 世代前のホスト OS を使用する必要があります。

例1

Windows Server 2012 R2 を Hyper-V 上で VM ゲストとして動作させる場合、Windows Server 2012 または Windows Server 2012 R2 (または、現時点でリリースされていませんが Windows Server 2016)を使用する必要があります。

Windows Server 2008 R2 の Hyper-V では、Windows Server 2012 R2 ゲストはサポートされません。

Important
Windows Server 2012 is the last version of Windows that will be supported as a guest operating system on this platform. There will be no further additions to the list of supported Windows guest operating systems.

例2

Windows Server 2016 (まだ正式リリースされていませんが)をゲスト OS として動作させる場合は、Windows Server 2012 R2 より新しい Hyper-V ホストのみがサポートされる予定です。

公式な公開されたドキュメント(TechNet や MSDN)で、ポリシーに関する明確な記述を見つけられないのですが(ご存知の方がいたらぜひ教えてください)、以下にそれらしい情報があります。

A: From a support standpoint, Microsoft uses a consistent support policy for guest operating systems where we support a guest operating system (N) on an N-1 guest. Thus, Windows Server 2012 R2 is supported as a guest on a Windows Server 2012 Hyper-V, but it is not supported on Windows Server 2008 R2 SP1 (N-2).

※上記の “N-1 guest” は “N-1 host” の間違えなのではないかと思います。

Q: I want to deploy Windows 10 within Hyper-V VMs. What Hyper-V host is required?

A: From a support standpoint, Microsoft uses a consistent support policy for guest operating systems that are newer than the Host OS. Specifically, Microsoft supports a guest operating system (N) on an N-1 HOST. Thus, Windows Server 2012 R2 is supported as a guest on a Windows Server 2012 Hyper-V HOST, but it is not supported on a Windows Server 2008 R2 -SP1 Hyper-V HOST (N-2).

まとめ

Hyper-V ホストのバージョン N に対して、Windows Guest は N+1 までしかサポートされません。言い換えると、ゲスト OS バージョン N を Hyper-V ホスト上で使用したい場合、ホスト側は N-1 以上のバージョンである必要があります。

Written by kazu

2016/07/09 at 19:43

SCOM タスクから PowerShell スクリプトを実行する

leave a comment »

System Center 2012 SP1 Operations Manager のタスクとして、PowerShell スクリプトを実行する方法です。

System Center Operations Manager のエージェントタスク

System Center Operations Manager (SCOM)のエージェントタスクは、管理対象(ターゲット)コンピューター上で実行されるスクリプトまたはプログラムです。エージェントタスクを実行すると、ターゲットコンピューター上で処理が実行され、その出力が SCOM コンソールに表示されます。

エージェントタスクは以下の 3 種類(Windows コンピューター向けには 2 種類)です。

  1. コマンドライン タスク
  2. UNIX/Linux シェルコマンド タスク
  3. スクリプト タスク

PowerShell スクリプトを実行したい場合、スクリプト タスクを使用したくなりますが、スクリプト タスクは VBScript および JScript を実行するためのタスクです。PowerShell スクリプトは実行できません。

PowerShell スクリプトを実行する場合は、コマンドライン タスクを使用します。

PowerShell スクリプトを実行するタスクの作成

「ファイルへの完全パス」に powershell.exe のパスを、「パラメーター」にスクリプトファイルの指定を含む、各種引数を設定します。

scom-task-powershell

ここでは、mgr01 の管理共有経由でアクセス可能なスクリプトファイルを実行するスクリプトとして指定しています。-NoLogo で powershell.exe 起動時のロゴ表示を抑制し、-ExecutionPolicy でこのタスクのみ実行ポリシーを Bypass に変更しています。(管理共有上のスクリプトが、外部スクリプトと認識されるため。)

参考

SCOM タスクとして登録する際に、該当のスクリプトのみ実行ポリシーを変更する方法は、以下のポストをご確認ください。

一時的に PowerShell スクリプト実行ポリシーを変更する

with one comment

意外と知らないという方が多かったので、まとめておきます。

PowerShell でスクリプトを実行するには

PowerShell でスクリプトを実行するためには、実行ポリシー(Execution Policy)が適切に設定されている必要があります。実行ポリシーは、ヘルプ トピックの about_Execution_Policies に詳しく書かれています。

Windows PowerShell の実行ポリシーを使用して、Windows PowerShell によって構成ファイルが読み込まれてスクリプトが実行される条件を決定できます。

実行ポリシーは、ローカル コンピューター、現在のユーザー、特定のセッションに設定できます。グループ ポリシー設定を使用して、複数のコンピューターやユーザーに実行ポリシーを設定することもできます。

ローカル コンピューターの実行ポリシーと現在のユーザーの実行ポリシーは、レジストリに格納されます。Windows PowerShell プロファイルに実行ポリシーを設定する必要はありません。特定のセッションの実行ポリシーは、メモリ内にのみ格納され、セッションが閉じられると失われます。

実行ポリシーはユーザーの操作を制限するセキュリティ システムではありません。たとえば、ユーザーはスクリプトを実行できないとき、コマンド ラインでスクリプトの内容を入力すると、容易にポリシーを回避できます。一方で、実行ポリシーを使用して基本的な規則を設定することで、意図せずに違反することを防止することができます。

PowerShell コンソール上でヘルプを表示する場合は、以下を実行します。

Get-Help about_Execution_Policies

現在の設定を取得する場合は、Get-ExecutionPolicy コマンドレットを使用します。

PS C:\> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned


PS C:\>

各スコープに対して、現在どのようなポリシーが適用されているか確認できます。

Execution Policy の種類

簡潔に記載すると以下の通りです。詳細は、TechNet を参照してください。

Restricted

  • いかなる場合もスクリプトや外部モジュールの実行は禁止
  • クライアント系 OS および 2012 までのサーバー系 OS の既定

AllSigned

  • 全てのスクリプトに電子署名が必要
  • 電子署名の証明書が信頼されていない場合は、確認メッセージを表示

RemoteSigned

  • 原則 AllSigned と同じだが、ローカル(NTFS Zone.Identifier 的な意味で)のスクリプトについては署名なしで実行可能
  • 2012 R2 以降のサーバ系 OS の既定

Unrestricted

  • 全てのスクリプトを実行可能だが、ローカルのスクリプト以外は警告を表示

Bypass

  • 全てのスクリプトを実行可能で、かつ警告も出さない

スコープ

実行ポリシーはスコープに対して適用されます。スコープごとに異なるポリシーを設定することもできます。その場合、上位のスコープに設定されたポリシーが優先されます。(全て Undefined の場合は、Restricted とみなされます。)

  1. MachinePolicy : グループポリシーのコンピューターポリシーによる設定
  2. UserPolicy : グループポリシーのユーザーポリシーによる設定
  3. Process : ある PowerShell プロセス内(のみ)
  4. CurrentUser : あるコンピューターの、あるユーザーのみ(あるコンピューターの、特定ユーザーのグローバル設定)
  5. LocalMachine : あるコンピューターのみ(あるコンピューターの、全ユーザーのグローバル設定)

1 と 2 はグループポリシーによる設定、3 ~ 5 は、Set-ExecutionPolicy を使用して設定します。

一時的に Execution Policy を変更する

やっと本題です。上記に記載の通り、PowerShell の実行ポリシーはグループポリシーで強制されていない限りプロセス単位で変更が可能です。かつ、Process スコープ(および CurrentUser スコープ)は、管理者でなくともポリシーの設定が可能です。

PowerShell 起動後(開始後)に変更

PowerShell プロセス起動後は、Set-ExecutionPolicy の –Scope パラメーターで Process を指定すると、それ以降のポリシーを変更できます。

PS C:\> Get-Content C:\ps\sample01.ps1
$PSHOME
PS C:\> .\ps\sample01.ps1
.\ps\sample01.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\ps\sample01.ps1 を読み込むこと
ができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してく
ださい。
発生場所 行:1 文字:1
+ .\ps\sample01.ps1
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\> Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
PS C:\> .\ps\sample01.ps1
C:\Windows\System32\WindowsPowerShell\v1.0
PS C:\>

PowerShell 起動時に変更

PowerShell 起動時に、その(これから起動する)PowerShell プロセスのみポリシーを変更したい場合は、powershell.exe のオプションとしてポリシーを渡します。

C:\>powershell.exe -NoLogo -ExecutionPolicy RemoteSigned -File .\ps\sample01.ps1
C:\Windows\System32\WindowsPowerShell\v1.0

C:\>

まとめ

  • 特定のバッチやタスクのみ、一時的な対応などでスクリプトの実行が必要な場合は、一時的に(該当プロセスのみ)実行ポリシーを変更してスクリプトを実行できます。
  • 管理者としてユーザーによる一時的な実行ポリシーの変更が許容できない場合は、グループポリシーでのポリシー配布が必要です。