每当变量使用 powershell 返回数据时打印输出 [英] Print output whenever the variable returns data using powershell
本文介绍了每当变量使用 powershell 返回数据时打印输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
每当变量 $PrinterStatus 返回任何数据时,我都会尝试打印该变量,但 If else 逻辑没有提供正确的数据.
$CurrentTime = Get-Date$打印机状态=Get-Printer -ComputerName "TGHYT-6578UT" |Foreach-对象{$打印机 = $_$打印机|获取打印作业 |Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } |Select-Object @{name="Printer Name";expression={$_.printerName}},@{name="提交时间";表达式={$_.SubmittedTime}},作业状态,@{name="Port";expression={$Printer.PortName}},@{name="文档名称";表达式={$_.documentname}},@{n='时差';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |Sort-Object -Property jobstatus -Descending}if([string]::IsNullOrEmpty($PrinterStatus)){写输出打印机不存在"$output = $PrinterStatus >"C:\Output.txt" #应该给出空白的txt文件}别的 {写输出打印机存在"$output = $PrinterStatus >"C:\输出.txt"}
解决方案
由于您的 $PrinterStatus
将是自定义打印作业对象的数组,因此您可以检查该数组的长度.
>
$CurrentTime = Get-Date$PrinterStatus = @()$PrinterStatus = Get-Printer -ComputerName "TGHYT-6578UT" |Foreach-对象{获取打印作业 $_ |Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } |Select-Object @{name="Printer Name";expression={$_.printerName}}, @{name="Submitted Time";expression={$_.SubmittedTime}}, @{name="jobstatus";expression={$_.jobstatus}}, @{name="Port";expression={$Printer.PortName}}, @{name="Document Name";expression={$_.documentname}}, @{n='时差';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |Sort-Object -Property jobstatus -Descending}如果($PrinterStatus.Count -eq 0){写输出打印机不存在"} 别的 {写输出打印机在场"}$PrinterStatus >"C:\输出.txt"
我还稍微清理了您的代码并修复了在您的自定义对象中插入 jobstatus
的问题.
I am trying to print the variable whenever the variable $PrinterStatus is returning any data but the correct data is not coming with If else logic.
$CurrentTime = Get-Date
$PrinterStatus=
Get-Printer -ComputerName "TGHYT-6578UT" | Foreach-Object {
$Printer = $_
$Printer | Get-Printjob |
Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } |
Select-Object @{name="Printer Name";expression={$_.printerName}},
@{name="Submitted Time";expression={$_.SubmittedTime}},
jobstatus, @{name="Port";expression={$Printer.PortName}},
@{name="Document Name";expression={$_.documentname}},
@{n='Difference in Hours';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |
Sort-Object -Property jobstatus -Descending
}
if([string]::IsNullOrEmpty($PrinterStatus))
{
Write-Output "Printers NOT Present"
$output = $PrinterStatus > "C:\Output.txt" #Shoud give blank txt file
}
else {
Write-Output "printers Present"
$output = $PrinterStatus > "C:\Output.txt"
}
解决方案
As your $PrinterStatus
will be an array of your custom print job objects, you can check the length of that array.
$CurrentTime = Get-Date
$PrinterStatus = @()
$PrinterStatus = Get-Printer -ComputerName "TGHYT-6578UT" | Foreach-Object {
Get-Printjob $_ |
Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } |
Select-Object @{name="Printer Name";expression={$_.printerName}}, @{name="Submitted Time";expression={$_.SubmittedTime}}, @{name="jobstatus";expression={$_.jobstatus}}, @{name="Port";expression={$Printer.PortName}}, @{name="Document Name";expression={$_.documentname}}, @{n='Difference in Hours';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |
Sort-Object -Property jobstatus -Descending
}
if ($PrinterStatus.Count -eq 0) {
Write-Output "Printers NOT Present"
} else {
Write-Output "Printers Present"
}
$PrinterStatus > "C:\Output.txt"
I also cleaned up your code a little and fixed the insertion of jobstatus
in your custom object.
这篇关于每当变量使用 powershell 返回数据时打印输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文