Powershell if语句

WebsGhost

在我的其中一台服务器中,我们有一个程序,每个月需要更新一次,该程序在终端服务器上运行。

我的基本脚本正在运行(非常简单):


Get-SmbOpenFile |where {$_.Path -eq "D:\Shares\Programs\test.exe"} |select ClientUserName, path |ft -autosize

pause

但是我试图使其更“智能”,因此我尝试使用IF语句:

第一次测试:

$open = Get-SmbOpenFile |where {$_.Path -eq "D:\Shares\Programs\test.exe"} |`
select ClientUserName, path |ft -autosize



if ($open -eq "true")
{ write-host "showing open files"
}

elseif ($open -eq "false")
{ "All cloesd"
}

pause

第二次测试:

$open = Get-SmbOpenFile |where {$_.Path -eq "D:\Shares\Programs\test.exe"} |`
select ClientUserName, path |ft -autosize


if ($open -eq $true)
{
 write-host "showing open files"
}

elseif ($open -eq $false)
{ 
"All cloesd"
}

我也尝试过以这种方式定义变量:

$open = Get-SmbOpenFile |where {$_.Path -eq "D:\Shares\Programs\test.exe"} 

当我使用IF语句时,实际上根本没有任何输出。

非常感谢你的帮助 !

mklement0
  • 仅使用((Format-*等cmdlet进行显示格式设置; 如果必须以编程方式处理数据,则不要使用它们ftFormat-TableFormat-*cmdlet输出格式说明,而不是数据-请参阅此答案

  • 即使| ft -autosize已删除,也不应$open$true进行比较$false,因为如果LHS还不是布尔型(type [bool][1],则这样的显式比较通常将无法按预期进行相反,请利用PowerShell的隐式to-Boolean转换-请参阅此答案的底部

  • 您的if分支实际上没有输出 $open它仅Write-Host向显示屏输出状态消息。

放在一起:

$open = Get-SmbOpenFile | 
          Where-Object {$_.Path -eq "D:\Shares\Programs\test.exe"} |
            Select-Object ClientUserName, Path

if ($open) {
  Write-Host "showing open files"
  $open  # output the result
}
else {
  Write-Host "all closed"
}

Select-Object 返回:

  • 一个[pscustomobject]实例[2] 具有属性的自定义对象.ClientUserName.Path

    • 任何[pscustomobject]实例(无论其结构如何)都将$true在布尔上下文中求和。
  • 或“什么也没有”(从技术上讲,是[System.Management.Automation.Internal.AutomationNull]::Value),如果Where-Objectcmdlet在Get-SmbOpenFile的输出中找不到指定的路径

    • $false在布尔上下文中,“ Nothing”的计算结果为

同样,请参见此答案的底部,以获取有关隐式到布尔转换的完整规则集。


[1]值得注意的是,与LHS$false相比,LHS总是产生非原始对象$true(尽管操作数取反);例如(Get-Item /) -eq $true同样,任何非零的数字也不完全1表示$false例如:2 -eq $true另外,使用数组值的LHS-eq充当过滤器,返回匹配项数组(例如,(1, 2, 1) -eq $truereturn)1, 1

[2]通常,Select-Object可以返回多个对象,在这种情况下$open将接收[object[]]-typed阵列[pscustomobject]实例。具有2个或更多元素的数组始终 $true处于布尔上下文中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PowerShell“或”语句

来自分类Dev

Powershell IF语句

来自分类Dev

Powershell中的switch语句

来自分类Dev

PowerShell Active Directory IF语句

来自分类Dev

Powershell if管道中的语句

来自分类Dev

powershell if语句奇怪的行为

来自分类Dev

Powershell if else语句

来自分类Dev

Powershell Goto语句替换

来自分类Dev

Powershell IF语句语法问题

来自分类Dev

If Else 语句 Powershell CSV

来自分类Dev

PowerShell If 语句失败

来自分类Dev

Powershell“ where”语句-不包含

来自分类Dev

比较if语句Powershell中的对象

来自分类Dev

Powershell 将 IF 语句写入变量

来自分类Dev

如果之后,PowerShell缺少语句块

来自分类Dev

Powershell中是否有锁语句

来自分类Dev

Powershell语句进入调试器

来自分类Dev

PowerShell:在“ IF”语句中使用$ env:userprofile

来自分类Dev

在Powershell中使用if语句移动文件

来自分类Dev

PowerShell中的IF语句是否有简写形式?

来自分类Dev

Powershell脚本不会监听if语句

来自分类Dev

PowerShell cmdlet参数列表中的if语句

来自分类Dev

PowerShell If语句:IF等于多个特定文本

来自分类Dev

C#PowerShell-AddScript作为多个语句

来自分类Dev

Powershell-ForEach语句-连接结果

来自分类Dev

Powershell Graph API SDK更新语句

来自分类Dev

PowerShell:为什么while()语句永远循环?

来自分类Dev

无法在PowerShell中使用多个-replace语句

来自分类Dev

使用替换语句简化 PowerShell 脚本