0

Я хочу проверить, работает ли winrm в списке серверов.проверить подключение winrm в списке систем с помощью powershell

winrm id -r: servername работает для отдельных систем, но я хочу протестировать рекурсивно для списка из csv или текстового файла.

С выходом в файл с надписью «working» или «not working» для каждого.

Как это сделать?

Спасибо всем.

Редактировать:
Отправляйтесь в точку, где я передаю список vm и трубопроводов, пока не получаю успешные выводы подключения winrm к файлу и сбои, показанные на консоли.

Get-VM | где {$ .powerstate -как "PoweredOn"} | получить-vmguest | где {$ .guestfamily -как "windowsGuest"} | {Еогеасп WinRM -r идентификатор: $ _ имя хоста.} | Out-File C: \ Scripts \ winrmtest.txt

В моем из-файл я получаю выход как IdentifyResponse ProtocolVersion = http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd ProductVendor = Microsoft Corporation ProductVersion = OS: 6.1.7601 SP: 1,0 Stack: 2.0

для успешных соединений и на консоли Я получаю следующее за сбои:

Номер ошибки: -2144108526 0x80338012 Клиент не может подключиться к пункту назначения, указанному в запросе. Убедитесь, что служба в получателе запущена и принимает запросы. Проконсультируйтесь с журналами и документацией для службы WS-Management, работающей на иконе destinat , чаще всего IIS или WinRM. Если пунктом назначения является служба WinRM, выполните следующую команду в пункте назначения t o проанализируйте и настройте службу WinRM: «winrm quickconfig». WSManFault Сообщение = Клиент не может подключиться к получателю, указанному в запросе. Убедитесь в том, что запущена служба, запущенная в процессе dest , и принимает запросы. Проконсультируйтесь с журналами и документацией для службы WS-Management, запущенной o n адресатом, чаще всего IIS или WinRM. Если пунктом назначения является служба WinRM, выполните следующую команду для адресата для анализа и настройки службы WinRM: «winrm quickconfig».

Необходимо получить весь вывод в файл вместе с именем гостевого vm, на который отвечает ответ.

ответ

0

Пожалуйста, имейте в виду, что я не использовал командлеты VM, однако ниже приведен код, который, я думаю, вам поможет. Я добавил wmi для проверки службы winrm на каждой машине, если служба не запущена, посмотрите на метод startservice() для win32_service. если это вам незнакомо, труба | gm, чтобы просмотреть доступные свойства и методы.

Однако вот несколько рекомендаций:

  • PowerShell Объекты

Экспортный и управления данными является простым и чистым.

  • «-Filter» против «где {}»

    Посмотрите в командлетов VM и посмотреть, если они поддерживают -filter {property -operator "*filterby*"} ваш код будет работать намного быстрее.

$ All_VMS_Status = @()

get-vm | where {$.powerstate -like "PoweredOn"} | get-vmguest | where {$.guestfamily -like "windowsGuest"} | foreach { 

<# Create PowerShell Object with Hostname #> 
$psobject = New-Object -TypeName psobject 
$psobject | Add-Member -MemberType NoteProperty -Name "VM-HostName" -Value $($_.HostName) 

<# Determin if WINRM is working #> 
if(winrm id -r:$_.hostname) { 
    $Connection_Status = "Success" 
} Else { 
    $Connection_Status = "Failed" 
} 

<# Check winrm service on remorte PC#> 
$remote_winrm_Service = Get-WmiObject win32_service -ComputerName $($_.hostname) | Where{ $_.Name -eq "winrm"} 

<# Add all information to PS object for exporting #>  
$psobject | Add-Member -MemberType NoteProperty -Name "Winrm-Connection" -Value $Connection_Status 
$psobject | Add-Member -MemberType NoteProperty -Name "winrm-state" -Value $($remote_winrm_Service.State) 
$psobject | Add-Member -MemberType NoteProperty -Name "winrm-startmode" -Value $($remote_winrm_Service.StartMode) 
$psobject | Add-Member -MemberType NoteProperty -Name "winrm-ExitCode" -Value $($remote_winrm_Service.ExitCode) 
$psobject | Add-Member -MemberType NoteProperty -Name "winrm-Status" -Value $($remote_winrm_Service.Status) 

$All_VMS_Status += $psobject 

} 

<# Export to csv #> 
$All_VMS_Status | Export-Csv -Path "c:\scripts\winrmtest.csv" -NoTypeInformation` 
+0

Привет Шейн. Спасибо. Не знал о создании объектов. Получение ошибки: Ошибка вызова метода, потому что [System.Management.Automation.PSObject] не содержит метода с именем «op_Addition» Пробовал добавление в $ psobject = @(), но без радости. Любые идеи? – infidel

+0

Игнорируйте меня. дублируя вашу прекрасную работу. Это делает именно то, что я хочу. Спасибо! – infidel

+0

Без проблем, рад, что я мог бы помочь! –

Смежные вопросы