0

我想测试 winrm 是否在服务器列表上运行。

winrm id -r:servername 适用于单个系统,但我想递归测试 csv 或文本文件中的列表。

输出到一个文件,每个文件都说“工作”或“不工作”。

我该怎么做呢?

谢谢大家。

编辑:
到了一个点,我正在传递一个 vm 和管道列表,直到我成功地将 winrm 连接输出到文件并在控制台中显示失败。

get-vm |where {$ .powerstate -like "PoweredOn"}|get-vmguest |where {$ .guestfamily -like "windowsGuest"}|foreach {winrm id -r:$_.hostname} |Out-File c: \脚本\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 消息 = 客户端无法连接到请求中指定的目标。验证目标上的服务是否正在运行并且正在接受请求。请查阅在目标(最常见的是 IIS 或 WinRM)上运行的 WS-Management 服务的日志和文档。如果目标是 WinRM 服务,

需要将所有输出连同响应所针对的来宾 vm 的名称一起放入文件中。

4

1 回答 1

0

请记住,我没有使用过 VM cmdlet,但是下面是一些我认为应该对您有所帮助的代码。我添加了一个 wmi 来检查每台机器上的 winrm 服务,如果该服务没有运行,请startservice()查看win32_service. 如果您对此不熟悉,请通过管道| gm查看可用的属性和方法。

不过这里有一些建议:

  • PowerShell 对象

导出和管理数据既简单又干净。

  • “-Filter”与“Where{}”

    查看 VM cmdlet 并查看它们是否支持-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 回答