我的简单启用和禁用帐户powershell代码无法正常工作

ogsagwnx  于 2023-03-08  发布在  Shell
关注(0)|答案(2)|浏览(152)

我正在尝试检查本地用户帐户是否已禁用或已启用,并执行以下操作:如果已启用,请告诉我“帐户已启用,无需执行任何操作”
如果帐户已禁用,请告诉我,帐户已禁用,正在启用...已启用帐户
无论帐户是禁用还是启用,我得到的总是第一个输出:

#Checks local  user if its disabled to enable it
$isEnabled = $True
$Account = 'local_account'

try {
    $isEnabled = (Get-LocalUser $Account -ErrorAction Stop).Disabled
    Write-output  "local_account account is already enabled" 
}

catch {
    $isEnabled = $False
    write-output "local_account account is disabled, enabling..."
    Enable-LocalUser $Account
7d7tgy0s

7d7tgy0s1#

这些对象上没有.Disabled属性,您需要检查.Enabled。您还缺少if statement

try {
    $Account = 'local_account'

    # if its enabled
    if((Get-LocalUser $Account -ErrorAction Stop).Enabled) {
        "$Account account is already enabled"
    }
    else {
        # if its not enabled
        "$Account account is disabled, enabling..."
        Enable-LocalUser $Account -ErrorAction Stop
    }
}
catch {
    # if there was an error while enabling or trying to find the account
    Write-Error $_
}
vsaztqbk

vsaztqbk2#

请参阅下面重写的脚本

*主要原因.Disabled不是Get-LocalUser的属性,请改用.Enabled

  • 假设复制/粘贴错误,catch块中缺少}
  • $isEnabled变量已被删除,因为脚本中未使用它。
  • 使用-Name参数而不是$Account变量调用Get-LocalUser cmdlet。这是一种最佳做法,因为它更加清晰和简洁。
  • if语句已用于检查帐户是否已禁用,而不是将$isEnabled变量设置为True或False。这是检查帐户状态的一种更简洁的方法。
  • 使用Write-Output cmdlet代替write-output。这是最佳做法,因为它与PowerShell的命名约定更一致。
  • Write-Error cmdlet用于显示错误。这是一种最佳做法,因为它以一种易于识别错误源的方式格式化错误消息。
$Account = 'local_account'

try {
    $User = Get-LocalUser -Name $Account -ErrorAction Stop
    if (-NOT $User.Enabled) {
        Write-Output "The '$Account' account is disabled. Enabling..."
        $User | Enable-LocalUser
        Write-Output "The '$Account' account has been enabled."
    }
    else {
        Write-Output "The '$Account' account is already enabled."
    }
}
catch {
    Write-Error "An error occurred while checking the status of the '$Account' account. Details: $_"
}

相关问题