下面的函数返回一个结果,但是当我在IF语句中指定值时,它只返回“Yes”,无论我在-eq值中输入什么。
function GetRemoteLogonStatus ($computer = 'localhost') {
if (Test-Connection $computer -Count 2 -Quiet) {
try {
$user = $null
$user = gwmi -Class win32_computersystem -ComputerName $computer | select -ExpandProperty username -ErrorAction Stop
}
catch { "Not logged on"; return }
try {
if ((Get-Process logonui -ComputerName $computer -ErrorAction Stop) -and ($user)) {
"Workstation locked by $user"
}
}
catch { if ($user) { "$user logged on" } }
}
else { "$computer Offline" }
}
if (getremotelogonstatus -eq "blah blah blah")
{
write-host "Yes"
}
Else
{
Write-Host "no"
}
谢谢
1条答案
按热度按时间bkhjykvo1#
**对于来自 command(例如
GetRemoteLogonStatus
)的输出以参与 expression,命令调用(包括其参数,如果有的话)必须包含在(...)
**中,分组运算符:注意事项:
-eq
运算符将充当 * 过滤器 *,并且将返回 * 匹配元素的子数组 *,而不是返回$true
或$false
-请参阅概念性about_Comparison_Operators帮助主题。(...)
中的封装也是需要的,因为使用命令的输出作为另一个命令的 * 参数(该示例有些人为,因为很少需要显式使用Write-Output
):至于你尝试了什么:
getremotelogonstatus -eq "blah blah blah"
getremotelogonstatus
并 * 将-eq
和blah blah blah
作为参数传递给它 *。param(...)
块),也没有处理包含未绑定位置参数的自动$args
变量,因此这些参数实际上被 * 忽略 *。