ad1

ラベル PowerShell の投稿を表示しています。 すべての投稿を表示
ラベル PowerShell の投稿を表示しています。 すべての投稿を表示

2020年5月18日月曜日

PowerShell 5.1 環境で PowerCLI のインストールエラーが出た時の対処方法 ②(TLS バージョン問題での Install-Module や Register-PSRepository のエラー対応)

先日投稿した PowerShellGet と PackageManagement を新しいものに置き換えることで解決した PowerCLI のインストールできない問題、
調べていたら PowerShell Gallery が 4月から TLS 1.0 / TLS 1.1での接続が不可となり TLS 1.2 が必須となっていたことが原因だったようです。
詳細は以下の Microsoft の公式アナウンスを参照ください。


PowerShell Gallery TLS Support
https://devblogs.microsoft.com/powershell/powershell-gallery-tls-support/

ワークアラウンドとして適用した PowerShellGet 2.2.4.x から TLS 1.2 が強制されるようになっていたのでエラーが回避できた様です。

PowerShell で TLS 1.2 を強制することでの回避方法

先日の環境の PowerShellGet と PackageManagement をそれぞれ初期バージョンの 1.0.0.1 に戻して、TLS 1.2 を強制することで問題が回避できるか確認しました。

※ 公式手順が MS Blog にありましたのでリンクを追記します (2022/11/03)

# 最初に PowershellGet などのバージョンを確認
PS C:\> Get-Module PackageManagement,PowershellGet -list | Select-Object Name,Version,Path

Name              Version Path
----              ------- ----
PackageManagement 1.0.0.1 C:\Program Files\WindowsPowerShell\Modules\PackageManagement\1.0.0.1\PackageManagement.psd1
PowerShellGet     1.0.0.1 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PowerShellGet.psd1


# この状態で PowerShell Gallery から PowerCLI を見つけることができるか確認

PS C:\> Find-Module -Name VMware.PowerCLI
警告: Unable to resolve package source 'https://www.powershellgallery.com/api/v2'.
PackageManagement\Find-Package : 指定された検索条件とパッケージ名 'VMware.PowerCLI' と一致するものが見つかりませんでした。
登録されている使用発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1360 文字:3
+         PackageManagement\Find-Package @PSBoundParameters | Microsoft ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPackage) [Find-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage

# エラーになったのでプロトコルを確認

PS C:\> [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls

# Microsoft の公式ブログにもある手順で TLS 1.2 を設定

PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# TLS 1.2 が指定されたことを確認

PS C:\> [Net.ServicePointManager]::SecurityProtocol
Tls12

# もう一度 Find-Module で PowerCLI が見つかるか確認

PS C:\> Find-Module -Name VMware.PowerCLI

Version    Name                                Repository           Description
-------    ----                                ----------           -----------
12.0.0.... VMware.PowerCLI                     PSGallery            This Windows PowerShell module contains VMware.PowerCLI
 


手順としては非常にシンプルで、

[Net.ServicePointManager]::SecurityProtocol

で現在のプロトロルバージョンを確認し、古いバージョンの指定のままならば

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

で TLS 1.2 の利用を強制設定すれば今まで通りデフォルトバージョンの PowerShellGet でも PowerCLI のインストール、メンテナンスができました。
セキュリティの観点からも既定値はあらかじめ変えておいたほうが良いかもしれませんね。

また、PowerShellGet 2.2.4.x から TLS 1.2 が強制されるようになっているので、TLS 1.2 を指定したついでにプリインストールされている PowerShellGet も更新してしまうと良いです。

プリインストールされている PowershellGet のアップデート方法


# 現在(プリインストール)の PowerShellGet,PackageManagement のバージョンを確認

PS C:\> Get-Module PowerShellGet,PackageManagement -ListAvailable
    ディレクトリ: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Binary     1.0.0.1    PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...
Script     1.0.0.1    PowerShellGet                       {Install-Module, Find-Module, Save-Module, Update-Module...}

# PowerShellGet を更新 (プリインストールのものは Update-Module ではなく Install-Module に -AllowClobber オプションを使う)

PS C:\> Install-Module PowerShellGet -AllowClobber -Force

# インストールされたバージョンを確認
# Update-Module ではないので更新さらたバージョンと旧バージョンが両方確認出来る

PS C:\> Get-Module PowerShellGet,PackageManagement -ListAvailable
    ディレクトリ: C:\\Documents\WindowsPowerShell\Modules
ModuleType Version    Name                                ExportedCommand
---------- -------    ----                                ----------------
Script     1.4.8.1    PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...
Script     2.2.5      PowerShellGet                       {Find-Command, Find-DSCResource, Find-Module, Find-RoleCap...

    ディレクトリ: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Binary     1.0.0.1    PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...
Script     1.0.0.1    PowerShellGet                       {Install-Module, Find-Module, Save-Module, Update-Module...}


PowerShellGet が更新できればその後は PowerShell Gallery などへの接続は TLS 1.2 を利用するようになります。


ご参考まで

2020年5月16日土曜日

PowerShell 5.1 環境で PowerCLI のインストールエラーが出た時の対処方法 ①(TLS バージョン問題での Install-Module や Register-PSRepository のエラー対応)

先日、踏み台サーバで利用している PowerCLI のバージョンアップをしようとしたところ Install-Module コマンドが使えず、Register-PSRepository での PowerShellGallery リポジトリの再登録などもエラーとなってしまった際の復旧手順を覚え書きしておきます。

環境

  • Windows Server 2016 Std (10.0.14393)
  • PowerShell Version : 5.1.14393.3471

最終的な対処方法

PowerShell 7.0 (PowerShell Core) をインストールして、そちらで PowerCLI をインストールするか (但し Image Builder など一部は利用できない)、
PowerShellGet と PackageManagement のモジュールをデフォルトの Ver 1.0.0.1 からそれぞれ最新に更新する事で PowerShellGallery の利用が可能に戻りました。

2020/5/18 追記
本事象の根本原因が 4月以降、PowerShell Gallery にて TLS 1.0 / 1.1 での接続を非サポートとし、TLS 1.2 を必須とする変更が入ったことが原因だったようなので、
TLS 1.2 の指定方法などを別記事でまとめました。急ぎ修正する場合は TLS 1.2 を指定して、 Install-Module のオプションで -SkipPublisherCheck を指定することで回避は出来ます。恒久的には TLS1.2 を既定にして、PowerShellGet もアップデートすることが推奨されます。

2020年1月31日金曜日

VxRail を PowerShell で管理・操作する

※ このブログでは VxRail のことはあまり書いてなかったのですが、旧 EMC Community Network のブログスペースが近々閉鎖される様なので今後はこちらにも VxRail の事を書いていこうと思います。

今回は VxRail を PowerShell を利用して管理運用するツールをご紹介します。

vSphere 6.7 の HTML5 vSphere Client に対応した VxRail 4.7 以降、API での各種操作がバージョンを追うごとにサポートが増えている VxRail ですが、昨年末にリリースされた VxRail 4.7.300 (vSphere 6.7u3 対応) から、VxRail の PowerShell 用モジュールがリリースされました。※ PowerShell 5.0 以降の環境が必要です

パッケージの入手

パッケージは以下リンクから入手できます(要 DellEMC Support サイトのアカウント)

VxRail PowerShell Package
https://download.emc.com/downloads/DL96554_VxRail-PowerShell-Package.zip

2019年7月16日火曜日

Developer Center と Code Capture で楽々PowerCLI 生活

先日、コミュニティ勉強会 VMware DevOps Meetup #2 https://vmware.connpass.com/event/133712/ にて LT 枠でお話しした内容となりますが、こちらにも内容をアップします。

※ SlideShare にアップした当日の資料は以下となります。




当日は70名近くの方にお聴き頂いたのですが、意外と昔からあった「Onyx」という vSphere Client の操作を PowerCLI 等のコードに吐き出すツールについてはご存知なかったようで、聴講頂いた方がさっそく Twitter に試した事を投稿して頂いたりと反応がありました。

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日でアクセスの多い投稿