在 PowerShell 中创建包含变量的表

2023-11-22

我仍在学习 PowerShell 脚本编写方法,并且正在编写一个脚本来计算文件服务器的可用空间百分比,并在驱动器达到剩余可用空间的 10% 或更少时发送电子邮件通知(这种情况发生)大约每月一次,我需要在收到客户发来的电子邮件之前知道没有更多空间)。到目前为止,该脚本运行良好,并且设置为每天早上通过 Windows 任务运行。但我当前的输出格式是手动完成的。我想知道是否有一种方法可以传递使用 Get-WmiObject 函数收集和计算的信息中的变量。我尝试过格式表并尝试弄乱哈希表,但无济于事。任何想法都会有帮助。谢谢。

# Set Parameters
$file = "c:\location\Lowdisk.txt"
Clear-Content $file

$emailTO = "[email protected]"
$emailFrom = "[email protected]"
$smtpServer = "smtpServer"

$diskspace = "3"
$computers = ("FSCN01","FSCN02","FSCN03","FSCN04")
echo "Server Name       Drive       Drive Size       Free Space       % Free" >> $file
$i = 0

# Get Drive Data
foreach($computer in $computers)
{
$drives = Get-WmiObject -ComputerName $computer Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}
foreach($drive in $drives)
{
    $ID = $drive.DeviceID
    $size1 = $drive.size / 1GB
    $size = "{0:N1}" -f $size1
    $free1 = $drive.freespace / 1GB
    $free = "{0:N1}" -f $free1
    $a = $free1 / $size1 * 100
    $b = "{0:N1}" -f $a
        # Monitor for drive free space % under 10%
        if ($b -lt 10)
        {
            echo "$computer         $ID          $size         $free         $b" >> $file
            $i++
        }
}
}
# Send notification if script finds more than 0 drives with less than 35% free space 
    if ($i -gt 0) 
   { 
       foreach ($user in $emailTo) 
            { 
        echo "Sending Email Notification to $user" 
        $smtp = New-Object Net.Mail.SmtpClient($smtpServer) 
        $subject = "Server with Low Disk Space" 
        foreach ($line in Get-Content $file) 
                { 
                $body += "$line `n" 
                } 
        Send-MailMessage -to $user -From $emailFrom -Attachments $file -SmtpServer $smtpServer -Subject $Subject -Body $body 
        $body = "" 
                } 
   } 

Format-Table当您在单一类型的对象中拥有所有感兴趣的数据时,效果最佳。我建议为此创建自定义对象,例如:

foreach($computer in $computers)
{
    $drives = Get-WmiObject -ComputerName $computer Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}
    foreach($drive in $drives)
    {
        $obj = new-object psobject -Property @{
                   ComputerName = $computer
                   Drive = $drive.DeviceID
                   Size  = $drive.size / 1GB
                   Free  = $drive.freespace / 1GB
                   PercentFree = $drive.freespace / $drive.size * 100
               }
        if ($obj.PercentFree -lt 10) {
            $obj | Format-Table ComputerName,Drive,Size,Free,PercentFree
            $i++
        }
    }
}

如果您想更改显示格式,则可以在 format-table 命令中执行以下操作:

$obj | Format-Table ComputerName,Drive,@{n='Size';e={'{0:N1}' -f $_.Size}},Free,PercentFree
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PowerShell 中创建包含变量的表 的相关文章

随机推荐

  • 在 perl 中使用 -d 测试运算符

    我正在查看某人的旧代码 我发现了这样的声明 tmpStr some file location if d tmpStr printf 1 else printf 2 我很困惑什么 d有 有帮助吗 d如果后面的字符串是目录 则返回 true
  • 记录对 http.HandleFunc 内传入 HTTP 请求的响应

    这是一个后续问题在go中 如何检查写入http ResponseWriter的http响应 因为那里的解决方案需要伪造请求 这对于单元测试非常有用 但不适用于实时服务器 我想将我的 Web 服务为响应从用户收到的请求而返回的 HTTP 响应
  • 从后台线程结果更新 Winforms UI

    这可能是一个愚蠢的问题 但我在 stackoverflow 上找不到答案 我在 Winform 应用程序中有一个按钮单击事件 该应用程序运行一个线程来计算要在表单中显示的结果 当线程计算出结果后 如何更新 Forms UI private
  • Sphinx - 从父方法插入参数文档

    我有一些相互继承的类 所有类都包含相同的方法 让我们称之为mymethod 子级由此覆盖基类方法 我想生成一个文档mymethod在所有班级中使用sphinx Suppose mymethod接受争论myargument 此参数对于基方法和
  • 在 VS 2010 中将控制台应用程序转换为 WPF 应用程序时遇到问题

    我创建了一个控制台应用程序 后来我认为它作为 WPF 应用程序运行得更好 我将输出类型更改为 Windows 应用程序 并添加了我认为必要的参考 不幸的是 右键单击该项目不允许我添加资源字典或许多其他 WPF 类型 我错过了什么 我确实通过
  • 读取最后一个反斜杠后的文本

    我想读入文本文件中最后一个反斜杠之后的文本 目前我有 data Get Content C temp users txt users txt 文件包含用户主目录的路径 myserver home com users user1 test 如
  • 将字符串大写

    有谁知道一种非常简单的方法 只将字符串的第一个字母大写 而不管字符串其余部分的大写 例如 asimpletest gt Asimpletest aSimpleTest gt ASimpleTest 我也希望能够完成所有字符串长度 gt gt
  • 如何通过 vue-svg-loader 在 vue.js 中导入多个 svgs

    我想在一个 vue 组件中导入多个 svg 文档说我必须导入它们中的每一个 但是如何以更短 更清晰的方式导入多个 svgs vue svg loader 文档 https vue svg loader js org 如果我想要导入超过一百个
  • 使用字典的字典创建命名空间

    目前我正在使用json将字典保存到配置文件中 我加载它以将其变成dict然后把它变成一个SimpleNamespace因为我更喜欢点符号来访问设置 为此 我将其加载 如下例所示 import json from types import S
  • 覆盖 Rails default_scope

    如果我有一个具有默认范围的 ActiveRecord Base 模型 class Foo lt ActiveRecord Base default scope conditions gt bar bar end 有什么办法可以做一个Foo
  • 如何检测Windows是否被锁定?

    如何检测Windows是否被锁定 Win L或被屏幕保护程序锁定 是否可以 没有记录的方法来检查会话是否被锁定 然而 有一种方法可以检测会话是否存在getting锁定 使用 WTSRegisterSessionNotification 当工
  • TypeORM 选择列名的别名

    this sampleRepo find order id DESC select id group 这将返回id and group符合预期 但是如何返回id as user id 以及如何从组中选择不同的值 只需在您选择的字符串中添加别
  • 从 Jupyter Notebook 连接到 MySQL 数据库

    我正在使用 Jupyter Notebooks 来学习 Python 我想连接到通过 MAMP 本地托管的 MySQL 数据库 我该如何处理这个问题 import os import pymysql import pandas as pd
  • Ruby on Rails:如何使用 OAuth2::AccessToken.post?

    OAuth2 AccessToken post 方法在文档中是这样指定的 对象 post 路径 opts block 我试图传递一些论点 但似乎我做错了 response token post oauth create js title g
  • randomForests 包中的 `LocalImp` 参数到底有什么作用?

    谁能用相对简单的英语解释一下参数是什么localImp确实在randomForest包裹 The randomForest文档将该参数描述为 是否应该计算个案重要性度量 将其设置为 TRUE 将超越重要性 它还指出它生产 包含逐个重要性度量
  • 如何查找文本文件中多个单词的计数?

    我能够找到一个单词在文本文件中出现的次数 就像在 Linux 中我们可以使用 cat filename grep c tom 我的问题是 如何查找文本文件中 tom 和 joe 等多个单词的计数 由于您有几个名字 因此正则表达式是处理这个名
  • 何时使用/不使用,@OneToOne 和 @ManyToOne

    我刚刚开始阅读有关 JPA 及其在 Hibernate 中的实现的内容 为了更好地理解细节 我需要对一些基础知识进行一些澄清 何时使用 OneToOne 我可能会用 OneToOne如果实体管理器需要处理相关对象的持久性 重点是 我可以一直
  • (C2) 从哪里来

    由于某种原因 一段代码将空格替换为 u00A0 即不间断空格 然后使用此代码sanitize一个 URL 是的 我知道这在很多方面都很糟糕 奇怪的是 当我的测试jsp中显示这些流氓时 出现 为什么 用于演示该问题的示例 JSP
  • 在 JavaScript 类中正确声明静态变量

    在我的代码中 我执行以下操作 非常简单 class AddOrSelectAddress static body lt Error static async open await get basePath Manage AddOrSelec
  • 在 PowerShell 中创建包含变量的表

    我仍在学习 PowerShell 脚本编写方法 并且正在编写一个脚本来计算文件服务器的可用空间百分比 并在驱动器达到剩余可用空间的 10 或更少时发送电子邮件通知 这种情况发生 大约每月一次 我需要在收到客户发来的电子邮件之前知道没有更多空