Я использую PowerShell Studio для создания мультиформного скрипта, и у меня возникли некоторые проблемы.
Я пытаюсь разделить массив $ HostList ArrayList на $ OnlineHosts и $ OfflineHosts на основе Test-Connection.
Я знаю, что эта команда должна работать, я только что протестировал ее на одном измои обычные сценарии для ps1, выполняющие запись-хост для онлайн и оффлайн массивов.Вот раздел рабочего кода из моего ps1:
Clear-Host
$HostList = Get-Content "$Home\Documents\Scripts\ComputerList.txt"
Write-Host "Pinging selected computers to verify connection..."
$OnlineHosts, $OfflineHosts = $HostList.Where({Test-Connection $_ -Count 1 -Quiet},'Split')
$OnlineHosts
pause
$OfflineHosts
pause
Clear-Host
Write-Host "Could not contact the following computers:`n`n$OfflineHosts`n`nThe following computers are online:`n`n$OnlineHosts`n`nContinue anyways?" -ForegroundColor Red
$ReadHost= Read-Host " (y/n) "
Switch ($ReadHost)
{
Y {Write-Host "Yes, Continuing to main menu."}
N {Write-Host "No, preparing to exit" ; Pause ; Exit}
Default {Write-Host "Yes, Continuing to main menu." }
}
Однако в моем проекте Powershell Studio он не работает.Небольшой контекст: это новая форма, которой передается переменная $ HostList из родительской формы.Я проверил, что дочерняя форма получает переменную, выполнив Write-Host "$ HostList woohoo!"Я протестировал размещение кода Test-Connection как внутри, так и снаружи команды $ formTest_Load.Честно говоря, я не уверен, что именно помещать или не помещать в команду $ formTest_Load, поэтому информация об этом также будет полезна.
Вот код из моего проекта PowerShell Studio:
param ( [parameter(Mandatory = $true)]
[string]$global:HostList )
$global:OnlineHosts = [System.Collections.ArrayList]@()
Write-Host "$HostList woohoo!"
$formTest_Load =
{
$OnlineHosts.Add($HostList)
$OnlineHosts, $OfflineHosts = $HostList.Where({Test-Connection $_ -Count 1 -Quiet },'Split')
}
Вот код ошибки, который я получаю при запуске своей программы PowerShell Studio:
ОШИБКА:Test-Connection: общий сбой formPing.psf (14, 49): ОШИБКА: в строке: 14 символов: 49 ОШИБКА: + ... neHosts = $ HostList.Where ({Test-Connection $ _ -Count 1 Quiet}, 'Spl ... ОШИБКА: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ОШИБКА: + CategoryInfo: InvalidOperation: (:) [Test-Connection], ManagementException ОШИБКА: + FullyQualifiedErrorId: TestConnectionException, Microsoft.PowerShell.Commands.Test ConnectionCommand ОШИБКА:
Мой код Test-Connection выглядит символьно-символическим, как и в моемстарый файл ps1.
Кто-нибудь может увидеть, что может быть причиной ошибки?
Спасибо.
Кроме того, вот информация о том, что я использую: -Windows 10 Pro -PowerShell Studio 2018-версия 5.5.152.0 -64 бит
Запустите следующий код в ISE, и вы увидите, что я пытаюсь сделатьо:
$HostList = [System.Collections.ArrayList]@()
$HostList += HostName
$HostList += "FakeComputer"
Clear-Host
Write-Host "HostList contains: $HostList"
pause
Clear-Host
Write-Host "Verifying connection to target hosts..."
$OnlineHosts, $OfflineHosts = $HostList.Where({Test-Connection $_ -Count 1 -Quiet }, 'Split')
Clear-Host
Write-Host "HostList contains: $HostList`n"
Write-Host "OnlineHosts contains: $OnlineHosts`n"
Write-Host "OfflineHosts contains: $OfflineHosts`n"
pause