【问题标题】:Powershell script to check Bitlocker Status and email if Off用于检查 Bitlocker 状态和电子邮件(如果关闭)的 Powershell 脚本
【发布时间】:2018-02-26 13:36:52
【问题描述】:

我正在尝试制作一个脚本来自动检查 BitLocker 状态,如果未启用则发送电子邮件。

这是我目前所拥有的:

Get-BitlockerVolume -MountPoint "C:" | Select ProtectionStatus

这向我显示了状态,但现在我正在努力处理输出。我试过这样做:

$OutputVariable = (Get-BitlockerVolume -MountPoint "C:" | Select 
ProtectionStatus)
If ($OutputVariable -like "Off") {Echo "Oops"}
Else {Echo "Wow!"}

如果我理解正确,应该输出“糟糕”,但它一直显示“哇!”

也许我做错了,所以我正在寻找一些指导。

编辑:

多亏了下面的 cmets,我才能让它工作。这是我的完整脚本:

# Bitlocker Script

set-alias ps64 "$env:windir\sysnative\WindowsPowerShell\v1.0\powershell.exe" 
set-alias ps32 "$env:windir\syswow64\WindowsPowerShell\v1.0\powershell.exe"
ps64 {Import-Module BitLocker; Get-BitlockerVolume}
$wmiDomain = Get-WmiObject Win32_NTDomain -Filter "DnsForestName = '$( (Get-WmiObject Win32_ComputerSystem).Domain)'"
$domain = $wmiDomain.DomainName
$OutputVariable = (ps64 {Get-BitlockerVolume -MountPoint "C:"})
If ($OutputVariable.volumestatus -like "FullyEncrypted") 
{
Exit
} 
ElseIf ($OutputVariable.volumestatus -NotLike "FullyEncrypted") 
{
$date = Get-Date
$emailSmtpServer = "smtp.xxx.com"
$emailSmtpServerPort = "xxx"
$emailSmtpUser = "xxx@xxx.nl"
$emailSmtpPass = "xxx"

$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = "Report <xxx@xxx.nl>"
$emailMessage.To.Add( "xxx@xxx.net" )
$emailMessage.Subject = "Bitlocker Status Alert | $domain $env:COMPUTERNAME"
$emailMessage.Body = "Bitlocker niet actief op $domain $env:COMPUTERNAME getest op $date"

$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );


$SMTPClient.Send( $emailMessage)
}

【问题讨论】:

标签: powershell bitlocker


【解决方案1】:

PowerShell 返回对象。您可以使用Select cmdlet 将这些对象的属性缩减为您感兴趣的属性。

因此如下命令:

Get-BitlockerVolume -MountPoint "C:" | Select ProtectionStatus

返回具有单个“ProtectionStatus”属性的对象,因此将其与字符串进行比较不会导致匹配。

您可以改为通过点符号(例如$OutputVariable.protectionstatus)访问该属性,以对其内容进行比较。或者,您可以修改您的 Select cmdlet 以使用 -ExpandProperty,它将返回指定属性的 作为其类型的对象:

$OutputVariable = Get-BitlockerVolume -MountPoint "C:" | Select -ExpandProperty ProtectionStatus

实现相同结果的另一种方法是:

$OutputVariable = (Get-BitlockerVolume -MountPoint "C:").ProtectionStatus

这里的括号使 cmdlet 执行,但是我们使用点表示法只返回指定的属性。

【讨论】:

    【解决方案2】:
    $OutputVariable = (Get-BitlockerVolume -MountPoint "C:")
    If ($OutputVariable.protectionstatus -like "Off") 
    {
        Write-Output "Oops"
    } 
    Else 
    {
        Write-Output "Wow!"
    }
    

    试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2013-12-14
      • 2022-01-08
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多