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-Host
。 exactly 当你想向控制台写入文本并且你想防止输出被分配时它很有用。
其次,基本上 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"
}
我正在通过尝试使我在工作中遇到的一些 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-Host
。 exactly 当你想向控制台写入文本并且你想防止输出被分配时它很有用。
其次,基本上 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"
}