Не удается найти командлет Connect-ServiceFabricCluster при использовании Powershell

Я пытаюсь следовать этой статье о развертывании приложения ServiceFabric с помощью powershell, но у меня есть проблема с запуском командлета Connect-ServiceFabricCluster. Я получаю следующее:

Connect-ServiceFabricCluster : The term 'Connect-ServiceFabricCluster' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, 
or if a path was included, verify that the path is correct and try again.
At line:1 char:2
+  Connect-ServiceFabricCluster
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Connect-ServiceFabricCluster:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Следуя другим статьям в Интернете, я попытался импортировать следующие вещи:

Import-Module "$ENV:ProgramW6432\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

Import-Module "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ServiceFabric"

Я также видел где-то, чтобы попытаться установить политику выполнения перед импортом модулей, поэтому я попробовал это:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUser

В разделе "Модули" в PowerShell ISE я вижу модуль ServiceFabricSDK, но не вижу этого командлета.

Как получить доступ к этим командлетам?

Спасибо за любую помощь.

Текущие версии:

Запуск $PSVersionTable.PSVersion, я получаю

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

ServiceFabric SDK - это версия 2.5.216

4 ответа

Вы должны убедиться, что используете Windows Powershell, а не просто Powershell. Это имело для меня значение.

Вы используете x86 версию Powershell ISE? Я также получил эту ошибку, но когда я переключился на другой ISE, командлет был снова доступен.

Во-первых, я бы установил вашу политику в обход. Это не может быть сделано из самого скрипта, потому что, вот что нужно для запуска с этой политикой. Вы можете настроить свой профиль powershell ise, чтобы сделать это для вас.

Set-ExecutionPolicy Bypass

На твой вопрос. Не все модули могут использовать функцию Import-Module. Например, модули с сайта technet.microsoft.com иногда необходимо устанавливать и разархивировать вручную. Я включаю скрипт, который я использую ниже, чтобы сделать это автоматически.

    #https://www.petri.com/manage-windows-updates-with-powershell-module\
    $url = "https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc/file/41459/47/PSWindowsUpdate.zip"
    $module = "PSWindowsUpdate"
    $zipped = "$($PSScriptRoot)\$($module).zip"
    $unzipped = "C:\Windows\System32\WindowsPowerShell\v1.0\Modules"
    #$unzipped = "$PSScriptRoot\$($module)"

    if (Get-Module -Name $($module)) {
           Write-Host "Module exists $($module)"
        } else {
           Write-Host "Getting Module $($module)"

    if(!(Test-Path $zipped)){
        (New-Object System.Net.WebClient).DownloadFile($url, $zipped)
        if($?){Write-Output "Downloaded zip $($zipped)"}
    }else{
        Write-Output "Zip found $($zipped)"
    }

    if(!(test-path "$($unzipped)\$($module)")){
    Add-Type -assembly “system.io.compression.filesystem”
    [io.compression.zipfile]::ExtractToDirectory($zipped, $unzipped)
    if($?){Write-Output "Unzipped to $($unzipped)"}
}
    Unblock-File -Path "$($unzipped)\$($module)" -Confirm
    if($?){Write-Output "Unblocked file $($unzipped)"}

    Import-Module $unzipped\*\$($module).psd1 -Verbose
    if($?){Write-Output "Imported module $($unzipped)"}        
}

Я был слишком поспешен в своем первом ответе. (что странно, потому что потребовалось некоторое время, чтобы напечатать...) в любом случае. Похоже, что процесс установки фактически распаковывает psm1 для вас.

  1. Убедитесь, что вы работаете от имени администратора, используйте это для проверки.

    ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]:: GetCurrent ()). IsInRole (`[Security.Principal.WindowsBuiltInRole]" Администратор ")

  2. Убедитесь, что имя файла, которое вы сделали на шаге 3, совпадает с путем на шаге 6.

  3. Когда вы запустите команду модуля импорта, добавьте $?. Это скажет вам, если он импортирован правильно. Вы также можете использовать эти команды, чтобы посмотреть, сработало ли это.

    get-command -name "Cluster"; получить-модуль

Я только что испытал ту же проблему на моем Win10 коробка,

когда cmdlets не были признаны действительными, и загрузка / установка соответствующих модулей, содержащих эти командлеты, не работала.

Единственное решение, которое работало для меня, было следующим:

  1. Зайдите в Панель управления -> "Программы и компоненты"
  2. Удалить Service Fabric SDK
  3. нажмите ссылку "Включить или отключить функции Windows" и удалите PowerShell.
  4. Далее перезагрузите Windows
  5. Вернитесь в Панель управления -> "Программы и компоненты" -> "Включить или отключить функции Windows".
  6. И установить PowerShell
  7. После чего скачиваем / устанавливаем Service Fabric SDK

Еще раз перезагрузите компьютер, запустите диспетчер кластеров Service Fabric (если он не запускается автоматически), затем щелкните правой кнопкой мыши его значок на панели задач и попробуйте снова создать кластер с 1 или 5 узлами. В моем случае это заняло меньше минуты.