Powershell - If 语句,在弹出窗口中返回计数结果

Powershell - If statement, returning count result in a popup

我正在通过尝试使我在工作中遇到的一些 jobs/problems 自动化来学习 Powershell。我想定期计算特定文件夹中是否有任何 .ERR 文件,如果有,则创建一个弹出框,其中包含该计数结果的数量。

所以我创建了一个脚本来计算文件夹中的文件,没问题。我还创建了一个脚本来生成一个弹出框,但是当我在一个 If 语句中组合这两个时,我不再得到一个弹出框和我的 powershell 控制台 returns a 1 after 运行 the script?

我的脚本如下:

$errchk = Write-Host ( Get-ChildItem c:\PS\test\*.ERR | Measure-Object ).Count
$str1 = "Number of .ERR files: "
If ($errchk -gt 0)
    {$wsh = New-Object -ComObject Wscript.Shell
    $wsh.Popup($str1+$errchk,0,"WDServer Error",0)}
$errchk = Write-Host ( Get-ChildItem c:\PS\test\*.ERR | Measure-Object ).Count

这就是问题所在。 Write-Host 具体表示“写入控制台”。该命令没有标准输出。它完全跳过输出,逻辑上等同于:

Write-Host ( Get-ChildItem c:\PS\test\*.ERR | Measure-Object ).Count
$errchk = $null

一般来说,您要避免使用 Write-Hostexactly 当你想向控制台写入文本并且你想防止输出被分配时它很有用。

其次,基本上 PowerShell 中的所有对象集合都有一个 Count 属性。您无需通过 Measure-Object 传递它们即可弄清楚。所以,你可以这样做:

$errchk = (Get-ChildItem c:\PS\test\*.ERR).Count
if ($errchk -gt 0) {
    $WSH = New-Object -ComObject WScript.Shell
    $WSH.Popup("Number of .ERR files: $errchk",0,'WDServer Error',0)
}

总的来说,我根本不会使用 COM 对象,也不会再使用 WScript,并且会尽可能避免使用 GUI 组件。你可以像这样完成你的脚本,它会做你真正需要的:

$errchk = (Get-ChildItem c:\PS\test\*.ERR).Count
if ($errchk -gt 0) {
    "Number of .ERR files: $errchk"
}