Не удается найти командлет 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 для вас.
Убедитесь, что вы работаете от имени администратора, используйте это для проверки.
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]:: GetCurrent ()). IsInRole (`[Security.Principal.WindowsBuiltInRole]" Администратор ")
Убедитесь, что имя файла, которое вы сделали на шаге 3, совпадает с путем на шаге 6.
Когда вы запустите команду модуля импорта, добавьте $?. Это скажет вам, если он импортирован правильно. Вы также можете использовать эти команды, чтобы посмотреть, сработало ли это.
get-command -name "Cluster"; получить-модуль
Я только что испытал ту же проблему на моем Win10
коробка,
когда cmdlets
не были признаны действительными, и загрузка / установка соответствующих модулей, содержащих эти командлеты, не работала.
Единственное решение, которое работало для меня, было следующим:
- Зайдите в Панель управления -> "Программы и компоненты"
- Удалить Service Fabric SDK
- нажмите ссылку "Включить или отключить функции Windows" и удалите PowerShell.
- Далее перезагрузите Windows
- Вернитесь в Панель управления -> "Программы и компоненты" -> "Включить или отключить функции Windows".
- И установить PowerShell
- После чего скачиваем / устанавливаем Service Fabric SDK
Еще раз перезагрузите компьютер, запустите диспетчер кластеров Service Fabric (если он не запускается автоматически), затем щелкните правой кнопкой мыши его значок на панели задач и попробуйте снова создать кластер с 1 или 5 узлами. В моем случае это заняло меньше минуты.