使用 powershell 在系统列表上测试 winrm 连接

test winrm connectivity on list of systems using powershell

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

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

输出到一个文件,每个文件显示 "working" 或 "not working"。

我该怎么做?

谢谢大家

编辑:
到了我传递虚拟机列表和管道的地步,直到我将成功的 winrm 连接输出到文件并在控制台中显示失败。

get-vm |where {$.powerstate -like "PoweredOn"}|get-vmguest |where {$.guestfamily -like "windowsGuest"} |foreach {winrm id -r:$_.hostname} |输出文件 c:\scripts\winrmtest.txt

在我的输出文件中,我得到如下输出 识别反应 协议版本 = http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd ProductVendor = Microsoft Corporation 产品版本 = OS:6.1.7601 SP:1.0 堆栈:2.0

对于成功的连接,在控制台上我得到以下失败信息:

错误号:-2144108526 0x80338012 客户端无法连接到请求中指定的目标。验证目标上的服务是 运行 正在接受请求。请参阅目标上 WS-Management 服务 运行ning 的日志和文档 离子,最常见的是 IIS 或 WinRM。如果目标是 WinRM 服务,运行 在目标 t 上执行以下命令 o 分析和配置 WinRM 服务:"winrm quickconfig"。 WSManFault Message = 客户端无法连接到请求中指定的目标。验证目标上的服务 ination 运行ning 正在接受请求。请参阅 WS-Management 服务的日志和文档 运行ning o n 目的地,最常见的是 IIS 或 WinRM。如果目标是 WinRM 服务,运行 上的以下命令 分析和配置 WinRM 服务的目标:"winrm quickconfig".

需要将所有输出以及响应所针对的来宾 vm 的名称获取到文件中。

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

不过这里有一些建议:

  • PowerShell 对象

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

  • “-过滤器”与“哪里{}”

    查看 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`