PowerShell
- Last Updated: September 25, 2024
- 6 minute read
- WhatsUp Gold
- Version 2024
PowerShell 提供对受监控设备的远程访问功能,并能利用设备安装的 PowerShell 模块和 .NET 库。
前提条件
WhatsUp Gold 使用 32 位(即 x86)PowerShell 引擎。只支持 32 位的 PowerShell 管理单元,纯 64 位管理单元不能正常工作。在 32 位和 64 位操作系统中均可使用的管理单元默认配置为 64 位系统,并且必须使用 WhatsUp Gold 手动配置为 32 位 PowerShell 引擎才能正常使用 。
远程连接要求
必须确保以下要素才能支持 WhatsUp Gold 计算机使用 PowerShell 连接到目标(被轮询的)设备。
- Windows 凭据:必须使用上下文对象提供的方法和属性明确使用凭据。必须将 HTTPS 用作运输途径,否则被轮询设备必须处于 WhatsUp Gold 运行的机器的 TrustedHosts 列表。
- 域和主机名。如果您使用用户默认凭据。要单独使用 IP 地址,您将需要在 PowerShell/WinRM 登录处指定凭据。(如需更多信息,请参阅 WinRM 故障排除帮助。)
- Enable-PSRemoting.在目的(被轮询)设备上启用 PowerShell 远程处理。如需详细信息,请参阅所提供的 MSDN 文档链接。
监控器配置
此主动监控器的配置字段包括:
- 名称。输入主动监控器的唯一名称。此名称会显示在“监控工具库”中。
- 描述。(可选)输入监控器的其他相关信息。此描述显示在“监控工具库”中监控工具名称的旁边。
- 超时 (秒)。输入 WhatsUp Gold 尝试连接所选设备的时间长度。
- 以设备凭据运行。启用此复选框,使用设备的 Windows 凭据来执行脚本。
- 脚本文本。输入您的主动监控器代码。
可用监控工具对象和属性
PowerShell 主动监控工具脚本提供两个实体化的会话对象。
- 上下文。IScriptContext 界面的实作。这个对象让您取得运行时间变量,也提供将结果返回客户端的机制。以下列出几个实用的方法:
- object GetProperty(string propertyName):可根据名称检索环境变量值。
- object SetProperty (string propertyName, string propertyValue):可根据名称规定环境变量值。
- void SetResult(int resultCode, ResultsString):让脚本能设定代表成功的值,通常 0 = 成功,1 = 失败。
- 记录程序:ILog 界面的实作。此对象提供 C# 应用程序可使用的相同方法。以下列出几个实用的方法:
- void Error(字符串信息):建立特定错误的记录项目,并包含信息。
- void Information(字符串信息):建立特定信息的记录项目,并包含信息。
- void WriteLine(字符串信息):建立一般性的记录项目,并包含信息。
获取或设置上下文对象的属性。
您可以通过 PowerShell 主动监控工具脚本获取上下文属性的值。
语法
Property-Value = Context.GetProperty("Property-Name")
Context.SetProperty(" Property-Name "," Property-Value ")
示例
$DeviceIpAddress = $Context.GetProperty("Address")
$Context.SetProperty("Timeout", "180")
设置结果字符串和监控器状态指示符
您设置的结果字符串将添加到监控器状态变更的说明中。您设置的状态标志 (0, 1)联机/脱机决定“状态变更时间轴” 显示的指示符。
# 成功“获取”设备 IP 之后,设置为结果并设置成功标志…
$Context.SetResult(0, "Device IP address is: " + $DeviceIpAddress)
上下文对象属性
可从运行时创建的连接对象访问以下属性。 PowerShell 主动监控器脚本语法示例。
属性名称 |
描述 |
|---|---|
|
DeviceID |
WhatsUp Gold 设备标识字符串。 |
|
地址 |
IP 地址。 |
|
超时 |
本次会话的超时值。(秒) |
上下文对象凭据属性
可针对PowerShell 主动监控工具脚本语法示例设置以下凭据属性。用主动监控器建立初始 PowerShell 连接后,如需要连接至其他设备、平台或应用,这些非常有用。
属性名称 |
描述 |
|---|---|
|
CredWindows:DomainAndUserid |
Windows 凭据的网域和用户。 |
|
CredWindows:Password |
设置 Windows 密码。 |
|
CredSnmpV1:ReadCommunity |
SNMPv1 读取群体字符串。 |
|
CredSnmpV1:WriteCommunity |
SNMPv1 写入群体字符串。 |
|
CredSnmpV2:ReadCommunity |
SNMPv2 读取群体字符串。 |
|
CredSnmpV2:WriteCommunity |
SNMPv2 写入群体字符串。 |
|
CredSnmpV3:AuthPassword |
SNMPv3 密码。 |
|
CredSnmpV3:AuthProtocol(integer-value) |
SNMPv3 authentication protocol.values:1 = 无,2 = MD5,3 = SHA |
|
CredSnmpV3:EncryptProtocol(integer-value) |
整数值可以是以下其中一种:
|
|
CredSnmpV3:EncryptPassword |
SNMPv3 加密密码。 |
|
CredSnmpV3:用户名 |
SNMPv3 用户。 |
|
CredSnmpV3:Context |
SNMPv3 上下文。 |
|
CredADO:Password |
ADO 密码。 |
|
CredADO:Username |
ADO 用户名。 |
|
CredSSH:Username |
SSH 用户名。 |
|
CredSSH:Password |
SSH 密码。 |
|
CredSSH:EnablePassword |
启用密码标志。 |
|
CredSSH:Port |
如不是默认则为 SSH 端口。 |
|
CredSSH:Timeout |
SSH 会话超时。 |
|
CredVMware:Username |
VMware 用户名。 |
|
CredVMware:Password |
VMware 密码。 |
|
CredTelnet:超时 |
telnet 连接的超时值。 |
|
CredTelnet:端口 |
Telnet 端口(如不是默认)。 |
|
CredTelnet:用户名 |
Telnet 用户名。 |
|
CredTelnet:密码 |
Telnet 密码。 |
|
CredJMX:用户名 |
Java 管理扩展用户名。 |
|
CredJMX:密码 |
Java 管理扩展密码。 |
|
CredSMIS:超时 |
“存储管理”超时。 |
|
CredSMIS:端口 |
“存储管理”端口。 |
|
CredSMIS:协议 |
“存储管理”协议。 |
|
CredSMIS:用户名 |
“存储管理”用户名。 |
|
CredSMIS:密码 |
“存储管理”密码。 |
|
CredAWS:AccessKeyID |
Amazon Web Services 账户 ID。 |
|
CredAWS:SecureAccessKey |
Amazon Web Services 访问秘钥。 |
|
CredAzure:TenantID |
Azure 订阅 ID。 |
|
CredAzure:ClientID |
Azure 客户端账户 ID。 |
|
CredAzure:SecureKey |
Azure 账户秘钥。 |
|
CredRestAPI:Username |
需要此用户名向设备进行身份验证。 |
|
CredRestAPI:Password |
与用户名关联的密码。 |
| CredRedfish:用户名 | 访问硬件设备所需的用户名。 |
| CredRedfish:密码 | 访问硬件设备所需的密码。 |
|
CredRedfish:协议 |
用于与设备进行安全通信的协议。 |
|
CredRedfish:端口 |
用于与设备通信的端口号。 |
| CredRedfish:超时 | 应尝试连接的时间长度。 |
|
CredRedfish:重试次数 |
WhatsUp Gold 应用于与设备通信的尝试次数。 |
|
CredRedfish:IgnoreCertificateErrors |
忽略证书错误。 |
示例:检查服务是否处于运行状态
创建仅在 DNS 客户端使用已存储凭据运行时显示联机状态的 PowerShell 主动监控器。
# 要轮询的设备
$DeviceIpAddress = $Context.GetProperty("Address")
# 直接设置计算机名称,或...
# $CompName = mydb02.corpnet.example.com(举例)
# ...用 WMI 获取...
$WmiRes = Invoke-Command -ComputerName $DeviceIpAddress -ScriptBlock { Get-WmiObject Win32_Computersystem }
$CompName = $WMIRes.PSComputerName
# 在远程设备上运行命令
$PsResult = Invoke-Command -ComputerName $DeviceName -ScriptBlock { Get-Service | where { $_.Name -match "Dnscache" } }
# 检查“运行”情况
if ($PsResult.Status -match 'Running') {
$RespondingMessage = "Process '" + $processName + "' running on " + $DeviceIpAddress + " is responding."
$Context.SetResult(0, $RespondingMessage )
} else {
$NotRunningMessage = "Process '" + $processName + "' running on " + $DeviceIpAddress + " is not responding."
$Context.SetResult(1, $NotRunningMessage )
}