0

サーバーのリストで winrm が実行されているかどうかをテストしたいと考えています。

winrm id -r:servername は個々のシステムで機能しますが、csv またはテキスト ファイルからリストを再帰的にテストしたいと考えています。

それぞれについて「動作中」または「動作していない」というファイルへの出力。

どうすればいいですか?

皆さんありがとう。

編集:
winrm 接続の出力がファイルに成功し、コンソールに失敗が表示されるまで、vm のリストを渡し、パイピングするところまで来ました。

get-vm |where {$ .powerstate -like "PoweredOn"}|get-vmguest |where {$ .guestfamily -like "windowsGuest"}|foreach {winrm id -r:$_.hostname} |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 クライアントは、要求で指定された宛先に接続できません。宛先のサービスが実行中であり、リクエストを受け入れていることを確認します。宛先 (最も一般的には IIS または WinRM) で実行されている WS-Management サービスのログとドキュメントを参照してください。宛先が WinRM サービスの場合は、宛先で次のコマンドを実行して、WinRM サービスを分析および構成します: 「winrm quickconfig」。WSManFault Message = クライアントは、要求で指定された宛先に接続できません。宛先のサービスが実行中であり、要求を受け入れていることを確認します。宛先で実行されている WS-Management サービスのログとドキュメントを参照してください。最も一般的なのは IIS または WinRM です。宛先が WinRM サービスの場合、

応答の対象となるゲスト VM の名前とともに、すべての出力をファイルに取得する必要があります。

4

1 に答える 1

0

私は VM コマンドレットを使用していないことに注意してください。ただし、以下は役立つと思われるコードです。各マシンで winrm サービスをチェックする wmi を追加しました。サービスが実行されていない場合はstartservice()win32_service. これに慣れていない場合は、パイプ| gmを使用して使用可能なプロパティとメソッドを確認してください。

ただし、いくつかの推奨事項があります。

  • PowerShell オブジェクト

データのエクスポートと管理は簡単でクリーンです。

  • 「-Filter」と「Where{}」の比較

    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`
于 2015-02-06T16:10:20.403 に答える