使用 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_service
的 startservice()
方法。如果您对此不熟悉,请通过管道 | 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`
我想测试 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_service
的 startservice()
方法。如果您对此不熟悉,请通过管道 | 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`