ad1

2018年3月30日金曜日

PowerCLI と Hyper-v の PowerShell コマンドの競合回避

PowerCLIとHyper-v用のコマンドレットには同じ名称のものがいくつかあり、競合すると正しくスクリプトが動かないことが多々あります。

※VMTNにも過去いくつか質問が上がっているので、以下も参考になります。
Issue running Powercli script in Powershell ISE
Disable (Hyper-V) PowerShell Modules

最近、作業用のWindows ServerでDNS・AD・DHCPのコンソールを「管理ツール」として機能追加しようとデフォルト設定のまま次へ次へを進めたところ、Hyper-v用のPowerShellモジュールがセットで入ってしまい、PowerCLIと競合して使えなくなってしまったので覚書として記録しておきます。

デフォルト設定のまま機能追加をしようとすると、以下のキャプチャのようにHyper-v用のPowerShellモジュールにチェックが入ってます。



手っ取り早くPowerCLIを正常に利用するためには、再度このHyper-v用のPowerShellモジュールのチェックを外してしまうことです。

Hyper-vモジュールが追加されているとGet-VMもVmware用とHyper-v用が見えます。


PS C:\> Get-Command -Name get-VM*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Get-VMCheckpoint                                   2.0.0.0    Hyper-V
Cmdlet          Get-VM                                             10.0.0.... VMware.VimAutomation.Core
Cmdlet          Get-VM                                             2.0.0.0    Hyper-V
Cmdlet          Get-VMAssignableDevice                             2.0.0.0    Hyper-V
Cmdlet          Get-VMBios                                         2.0.0.0    Hyper-V
Cmdlet          Get-VMComPort                                      2.0.0.0    Hyper-V
Cmdlet          Get-VMConnectAccess                                2.0.0.0    Hyper-V
Cmdlet          Get-VmcService                                     10.0.0.... VMware.VimAutomation.Vmc


「役割と機能の管理」からHyper-vモジュールを削除すれば正常に戻ります。

PS C:\> Get-Command -Name get-VM*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-VM                                             10.0.0.... VMware.VimAutomation.Core
Cmdlet          Get-VmcService                                     10.0.0.... VMware.VimAutomation.Vmc
Cmdlet          Get-VMGuest                                        10.0.0.... VMware.VimAutomation.Core
Cmdlet          Get-VMHost                                         10.0.0.... VMware.VimAutomation.Core
Cmdlet          Get-VMHostAccount                                  10.0.0.... VMware.VimAutomation.Core

2018年3月7日水曜日

PowerCLIのセキュリティ警告を無視する設定

私の場合はずぼらな正確なので、手元の検証環境でPowerCLIでvCenter接続時などの証明書チェック時の挙動は "Ignore" にしていたので気づかなかったのですが、
PowerCLI 10.0 に更新した人から今までどおりのアクセスだと弾かれてしまい、vCenterに接続できないと問い合わせがあったので変更手順を記しておきます。

以下のように、Get-Credentialの値を変数に入れて、Connect-VIServer などに渡している場合、デフォルトでは今までは黄色い文字で警告が出てましたが、PowerCLI 10から以下のように "Invalid server certificate" で弾かれてしまうようです。

PS E:\> $cre = Get-Credential

コマンド パイプライン位置 1 のコマンドレット Get-Credential
次のパラメーターに値を指定してください:
Credential

PS E:\> Connect-VIServer -Server ex-vcsa.techlab.local -Credential $cre
Connect-VIServer : 2018/03/07 17:52:31  Connect-VIServe
Error: Invalid server certificate. Use Set-PowerCLIConfiguration to set the value for the
InvalidCertificateAction option to Prompt if you'd like to connect once or to add a permane
nt exception for this server.
Additional Information: 機関 'ex-vcsa.techlab.local' との SSL/TLS のセキュリティで
保護されているチャネルに対する信頼関係を確立できませんでした。
発生場所 行:1 文字:1
+ Connect-VIServer -Server ex-vcsa.techlab.local -Credential $cr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo          : セキュリティ エラー: (: ) [Connect-VIServer]、ViSecurityNegotiationException
  + FullyQualifiedErrorId : Client20_ConnectivityServiceImpl_Reconnect_CertificateError,VMware.VimAutomation.ViCore.Cmdlets.Commands.ConnectVIServer


これを回避するためには Connect-VIServer のオプションで -Force を付けて実行するか
以後、-Force オプションを付けずに接続可能なように、Set-PowerCLIConfiguration でPowerCLIの規定値を変えておきます。 規定値は以下のようになっていると思います。Get-PowerCLIConfiguration コマンドで確認します。
ちなみにそれぞれの値の意味は以下のとおりです。
Unset – デフォルト値。基本的にはWarnと同じです(ただ、PowerCLI10から少しセキュリティが強化された?)
Prompt – サーバー証明書が信頼されていない場合、アクションを求めるプロンプトを表示します。
Fail – 証明書が有効でない場合は接続は確立しません。
Ignore – 証明書が無効であるかどうかを考慮せずに接続を確立します。
Warn – 証明書が有効でない場合、その理由と証明書に関する追加情報が表示されます。


PS E:\> Get-PowerCLIConfiguration

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Unset                     True                       300
User
AllUsers

閉じた環境で接続先は信頼しているのであれば、"AllUser" に "Ignore" を入れてしまってもよいですが、今までのようにせめて黄色文字で警告文を出すのであれば "Warn" で設定します。

PS E:\> Set-PowerCLIConfiguration -InvalidCertificateAction Warn -Scope AllUsers

Perform operation?
Performing operation 'Update PowerCLI configuration.'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): A

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Warn                      True                       300
User
AllUsers                                     Warn

Ignoreの場合は以下のように設定します。

PS E:\> Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope AllUsers

Perform operation?
Performing operation 'Update PowerCLI configuration.'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): A

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Ignore                    True                       300
User
AllUsers                                     Ignore

2018年3月1日木曜日

PowerShell Gallery からの PowerCLI インストール・アップデート方法

Vmware PowerCLI Blogで案内されましたが、PowerCLIが Ver 6.5.4 から 一気にVer 10.0 としてリリースされました。
https://blogs.vmware.com/PowerCLI/2018/02/powercli-10.html

VMware Code のサイトも一気に飛んでいます。
https://code.vmware.com/web/dp/tool/vmware-powercli/10.0.0

※ 最新版への固定 URL は https://code.vmware.com/tool/vmware-powercli


今回のアップデートで、元々 "vSphere PowerCLI" が正式名だったのが "VMware PowerCLI" に切り替わったことと、Ver 10.0 は初期リリースから10年を機に切り替えたとのこと。

過去30日でアクセスの多い投稿