【问题标题】:How can I check if printer is in some state longer than 30 minutes?如何检查打印机是否处于某种状态超过 30 分钟?
【发布时间】:2016-05-16 10:38:58
【问题描述】:

我有一个脚本,通过 WMI 检查来自所有打印服务器的所有打印机的状态。结果如下所示:

Name                            location                       Status                                                   
----                            --------                       ------                                                 
Xerox wc275.1                                                  Offline                                   
dnj-4000.1                                                     Offline                                 
6040.1                                                         Offline                        
m225.02                                                        Offline                                  
5225.01                                                        Offline    

如何检查打印机是否离线 30 分钟?我可以将输出放在文本文件中以进行日志记录或 smth 吗?我所需要的只是“如何做到”。稍后我将配置电子邮件通知等。但是我对powershell中的日志记录和解析一无所知。

【问题讨论】:

  • 每隔 x 分钟检查一次状态,如果您在总共 30 分钟内获得相同的状态(“离线”),也许您可​​以认为在这段时间内它处于离线状态。刷新间隔 30 分钟可能有点长(打印机可能会在该时间跨度内联机和脱机)。
  • 这只是一个简单的状态。不管是什么,离线,在线,错误或smth。我只想知道如何用powershell检查它。如果我每隔 x 分钟检查一次状态.. 不要认为这是一个好主意。记住离线打印机池并用时间跨度检查会更好吗?
  • 如何知道离线30分钟?

标签: powershell logging


【解决方案1】:

如果您每半小时将这些结果输出到一个文本文件,您可以使用 Compare-Object 报告两个文件之间的差异/相似之处:

$file1 = get-childitem -path "C:\Powershell\Test\Text" | sort LastWriteTime | select -ExpandProperty FullName -last 2 | Out-File C:\Powershell\path1.txt
$file2 = Get-Content -Path "C:\Powershell\path1.txt" | Select-Object -First 1
$file3 = Get-Content -Path "C:\Powershell\path1.txt" | Select-Object -Last 1
Compare-Object -ReferenceObject (Get-Content $file2) -DifferenceObject (Get-Content $file3) -IncludeEqual -ExcludeDifferent | sort InputObject     

其中,List1.txt 包含:

Xerox wc275.1                                                  Offline                                   
dnj-4000.1                                                     Offline                                 
6040.1                                                         Offline                        
m225.02                                                        Offline                                  
5225.01                                                        Offline

List2.txt 包含:

Xerox wc275.1                                                  Offline                                   
dnj-4000.1                                                     Online
6040.1                                                         Offline                        
m225.02                                                        Offline                                  
5225.01                                                        Online

所以结果给出了与 30 分钟前相同的行:

PS C:\WINDOWS\system32> C:\Powershell\Test\CompareMostRecentFiles.ps1

InputObject                                                                                                      SideIndicator                                                                                                  
-----------                                                                                                      -------------                                                                                                  
6040.1                                                         Offline                                           ==                                                                                                             
m225.02                                                        Offline                                           ==                                                                                                             
Xerox wc275.1                                                  Offline                                           ==                                                                                                             

注意事项:

这会检查特定文件夹中的 2 个最新文件,因此如果您每 30 分钟运行一次打印机检查并导出到文本文件,请确保将文本文件输出到它们自己的特定文件夹中包含其他任何内容,否则您将无法获得正确的结果。您还需要确保您的打印机检查脚本创建唯一的文本文件,并且不会一直覆盖相同的文件。

【讨论】:

    【解决方案2】:

    使用无限循环完成。

        $printers = @{}
    
    Get-WmiObject -Class Win32_Printer | 
    ForEach-Object {
        $printers[$_.Name] = $_ |
        Select-Object Name,DetectedErrorState,@{Name='PreviousStatus';Expression={$_.DetectedErrorState}},@{Name='StatusTime';Expression={0}}
    }
    
    Do {
        $check = Get-WMIObject -Class Win32_Printer
        ForEach($printer in $check) {
            If($printers[$printer.Name].DetectedErrorState -ne $printer.DetectedErrorState) {
                $printers[$printer.Name].PreviousStatus = $printers[$printer.Name].DetectedErrorState
                $printers[$printer.Name].DetectedErrorState = $printer.DetectedErrorState
                $printers[$printer.Name].StatusTime = 0
            } Else {
                $printers[$printer.Name].StatusTime += 1
            }
        }
        Start-Sleep 60
    } While ($True)
    

    非常感谢 Mr.Cduff 提出这个想法。

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2020-12-27
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多