2016-05-16 77 views
0

我有一個腳本,通過WMI檢查所有打印服務器中所有打印機的狀態。結果如下所示:如何檢查打印機是否處於30分鐘以上的狀態?

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

如何檢查打印機是否脫機30分鐘?我可以把輸出放在文本文件中進行記錄或掃描?我需要的是「如何做到」。稍後我會配置電子郵件通知等,但我不知道在PowerShell中記錄和解析。

+0

每隔x分鐘檢查一次狀態,如果您在總共30分鐘內獲得相同的狀態(「脫機」),也許您可​​以認爲該狀態在該段時間內處於脫機狀態。刷新間隔30分鐘可能會有點長(打印機可能在該時間段內聯機和脫機)。 – sodawillow

+0

它只是一個簡單的狀態。不管它是什麼,離線,在線,錯誤或不適用。我只是想知道如何使用PowerShell來檢查它。如果我每隔半分鐘檢查一次狀態,不要認爲這是個好主意。記住脫機打印機池並使用時間間隔檢查它會更好嗎? –

+0

如何知道30分鐘內是否已脫機? –

回答

0

如果你輸出這些結果到一個文本文件,每半小時,你可以用比較-對象2檔之間的彙報上的差異/相似之處:

$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分鐘檢查並出口到文本文件,確保文本文件正在輸出到他們自己的特定文件夾,不包含任何其他內容,否則您將得不到正確的結果。您還需要確保打印機檢查腳本創建唯一的文本文件,並且不會覆蓋同一文本文件。

0

使用無限循環完成它。

$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這個想法。

相關問題