当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣:你不特别吗

作者:精品下载站 日期:2024-12-14 07:44:44 浏览:14 分类:玩电脑

周五乐趣:你不特别吗


[玩转系统] 周五乐趣:你不特别吗

首先,您需要知道可以显示什么以及如何显示。您将使用 [CHAR] 类。不要太担心细节。您可以使用 [CHAR] 类在键盘上显示除常用字母数字和符号字符之外的字符。我还需要指出,我向您展示的所有内容都只能在 PowerShell 控制台中运行,而不能在 ISE 中运行。您可以通过以下方式查看其中一些角色。

(1..6).foreach({[pscustomobject]@{char=$_;value=$_ -as [char]}}) | format-table -AutoSize

此代码段与显示 [char]1 到 [char]6 相同。

[玩转系统] 周五乐趣:你不特别吗

您还会发现这些感兴趣的范围。

(11..31).foreach({[pscustomobject]@{char=$_;value=$_ -as [char]}}) | Format-Table -AutoSize
(161..190).foreach({[pscustomobject]@{char=$_;value=$_ -as [char]}}) | Format-Table -AutoSize

[玩转系统] 周五乐趣:你不特别吗

[玩转系统] 周五乐趣:你不特别吗

或者使用这一行将它们全部显示出来。

((1..6)+(11..31)+(161..190)).foreach({[pscustomobject]@{char=$_;value=$_ -as [char]}}) | Format-Table -AutoSize

现在您知道什么是可能的,让我们使用其中一些字符。服务是否正在运行的视觉指示器怎么样?

get-service | Sort Displayname |
Select DisplayName,
@{Name="Indicator";Expression={
Switch ($_.status) {
Running {[char]30}
Stopped {[char]31}
Default {[char]16}
}
}} | Format-Table -AutoSize -HideTableHeaders

我正在创建一个名为 Indicator 的自定义属性,它将根据服务状态显示特殊字符。为了使其易于阅读,我将其格式化为表格并隐藏标题,因为我可以从输出中得知我需要知道的一切。

[玩转系统] 周五乐趣:你不特别吗

还记得我提到过限制吗?特殊字符无法发送到文件、转换为 HTML 或导出。您所能做的就是运行代码并阅读屏幕。但这可能就是您所需要的。好吧,从技术上讲,您可以使用 Out-File 将输出定向到文件。您不会在记事本中看到这些字符,但在使用 Get-Content 时应该看到这些字符。

让我们将服务示例提升到另一个层次。使用 WMI 中的 Win32_Service 类,我们可以判断服务是否设置为自动启动但未运行。让我们对服务状态使用相同类型的指示器,并在自动启动服务未运行时使用指示器。

#filter out disabled services
Get-CimInstance -ClassName Win32_Service -filter "Startmode <> 'disabled'" | 
Sort Displayname | 
Select @{Name="Displayname";Expression={
 if ($_.DisplayName.length -ge 50) {
  #truncate long displaynames
  "$($_.displayname.substring(0,50))..."
  }
  else {
    #use the full displayname
    $_.displayname
  }
  }},
@{Name="Indicator";Expression={
  Switch ($_.state) {
   Running {[char]30}
   Stopped {[char]31}
   Default {[char]16}
  }
}},
@{Name="Attention";Expression={
 if ($_.startmode -eq 'Auto' -AND $_.state -ne 'Running') {
   [char]15
 }
}} | Format-Table -AutoSize -HideTableHeaders

[玩转系统] 周五乐趣:你不特别吗

我使用 [CHAR]15 作为我的指示器。你知道吗?因为我们知道除了在屏幕上读取输出之外我们不能对输出做任何事情(你可以这样做),所以让我们全力以赴。

Get-CimInstance -ClassName Win32_Service -filter "Startmode <> 'disabled'" | 
Sort Displayname | 
Select @{Name="Displayname";Expression={
 if ($_.DisplayName.length -ge 50) {
  #truncate long displaynames
  "$($_.displayname.substring(0,50))..."
  }
  else {
    #use the full displayname
    $_.displayname
  }
  }},
@{Name="Indicator";Expression={
  Switch ($_.state) {
   Running {[char]30}
   Stopped {[char]31}
   Default {[char]16}
  }
}},
@{Name="Attention";Expression={
 if ($_.startmode -eq 'Auto' -AND $_.state -ne 'Running') {
   [char]15
 }

}} | foreach {

write-Host ($_.DisplayName).padright(55," ")  -NoNewline

switch -Exact ($_.indicator.toInt32((Get-Culture).NumberFormat)) {
 30 { $c = "green" }
 31 { $c = "red" }
 16 { $c = "yellow" }
 default { $c = "white"}
}

Write-Host $($_.indicator.tostring()).Padleft(3) -ForegroundColor $c -NoNewline

If ($_.attention) {
    write-host $($_.attention.tostring()).PadLeft(3) -ForegroundColor Yellow
}
else {
    Write-Host " "
}
}  #foreach

此代码再次使用 WMI 和特殊字符,但随后它会查看我创建的特殊字符属性并确定用于输出的颜色。棘手的部分是将 [CHAR] 类转换回整数,以便我可以确定要使用的颜色。

switch -Exact ($_.indicator.toInt32((Get-Culture).NumberFormat)) {
 30 { $c = "green" }
 31 { $c = "red" }
 16 { $c = "yellow" }
 default { $c = "white"}
}

可能还有其他方法可以达到相同的结果,但这对我有用。

[玩转系统] 周五乐趣:你不特别吗

因此,请与这些特殊角色一起享受乐趣。请注意,您可以对输出执行的操作存在限制,但您如何使用它们可能没有限制。如果你想出一些有趣的东西,我希望你能分享。

让我们出去玩得开心吧。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯