0

winrm이 서버 목록에서 실행 중인지 테스트하고 싶습니다.powershell을 사용하는 시스템 목록에서 winrm 연결을 테스트하십시오.

winrm id -r : servername은 개별 시스템에서 작동하지만 csv 또는 텍스트 파일의 목록을 재귀 적으로 테스트하려고합니다.

각각에 대해 "작동 중"또는 "작동하지 않음"이라는 파일로 출력됩니다.

어떻게하면됩니까?

감사합니다.

편집 :
성공적인 Winrm 연결 출력을 콘솔에 표시하고 콘솔에 표시된 오류 메시지가 나타날 때까지 VM의 목록과 파이핑 목록을 전달하는 지점에 도달했습니다.

GET-VM | 여기서 {$ .powerstate -like "PoweredOn"} | {$ .guestfamily "windowsGuest"-like} | | 얻을-vmguest의 foreach {WinRM이 아이디 -r : $ _ 호스트 이름.} | 아웃 파일 C : 스크립트 \ \ winrmtest.txt 내 밖으로 파일 내가 얻고에서

IdentifyResponse ProtocolVersion = 같은 출력 http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd ProductVendor = 마이크로 소프트 PRODUCTVERSION = OS : 6.1.7601 SP : 1.0 스택 : 성공적인 연결을 위해 2.0

그리고 콘솔에서 다음과 같은 오류가 발생합니다.

오류 번호 : -2144108526 0x80338012 클라이언트가 요청에 지정된 대상에 연결할 수 없습니다. 대상의 서비스가 실행되어 이 실행되고 요청을 수락하는지 확인하십시오. 이온 (가장 일반적으로 IIS 또는 WinRM)에서 실행중인 WS-Management 서비스에 대한 로그 및 설명서를 참조하십시오. 대상이 WinRM 서비스 인 경우 대상에서 다음 명령을 실행합니다. o WinRM 서비스를 분석하고 구성합니다 ("winrm quickconfig"). WSManFault 메시지 = 클라이언트가 요청에 지정된 대상에 연결할 수 없습니다. 목적지가 인 서비스가 실행 중이고 요청을 수락하는지 확인하십시오. o 대상, 가장 일반적으로 IIS 또는 WinRM을 실행하는 WS-Management 서비스에 대한 로그 및 설명서를 참조하십시오. 대상이 WinRM 서비스 인 경우 대상에서 다음 명령을 실행하여 WinRM 서비스를 분석 및 구성합니다. "winrm quickconfig".

응답이있는 게스트 VM의 이름과 함께 파일에 모든 출력을 가져와야합니다.

답변

0

VM cmdlet을 사용하지 않았 음을 기억해 두십시오. 그러나 아래 코드는 도움이 될 것입니다. 각 컴퓨터에서 winrm 서비스를 확인하기 위해 wmi를 추가했습니다. 서비스가 실행 중이 아니면 win32_service에 대한 startservice() 메소드를 확인하십시오. 이것이 익숙하지 않은 경우 | gm 파이프를 사용하면 사용 가능한 속성 및 메서드를 볼 수 있습니다.

  • PowerShell을

내보내기 개체 및 데이터를 관리하는 것이 용이하고 깨끗한 :

그러나 여기에 몇 가지 권장 사항입니다.VM이 cmdlet을에 "어디 {}"

봐 대

  • "-Filter"그들이 -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

안녕 쉐인. 고맙습니다. Didnt는 객체 생성에 대해 알고 있습니다. 오류 받기 : [System.Management.Automation.PSObject]에 'op_Addition'이라는 메서드가 없기 때문에 메서드 호출이 실패했습니다. $ psobject = @()에서 추가했지만 기쁨은 없습니다. 아이디어가 있으십니까? – infidel

+0

나를 무시하십시오. 멋진 작품 복제. 이것은 정확히 내가 원하는 것입니다. 고맙습니다! – infidel

+0

문제 없습니다. 도움이 되니 기쁩니다! –