【问题标题】:Powershell Datetime null valuePowershell 日期时间空值
【发布时间】:2020-03-31 12:48:08
【问题描述】:

我正在开发一个关于 AD 用户帐户过期日期的 powershell。但是我遇到了一个问题,无法传递空参数来将 AD 用户帐户过期日期设置为 NEVER。

请帮忙!谢谢。

https://i.stack.imgur.com/Zt8sv.png

下面是我的脚本。

import-module C:\PS\color_menu.psm1
CreateMenu -Title "AD User Account Expire Tools" -MenuItems "View the User Account Expire Date","Set the User Account Expire Date","Exit" -TitleColor Red -LineColor Cyan -menuItemColor Yellow
do {
  [int]$userMenuChoice = 0
  while ( $userMenuChoice -lt 1 -or $userMenuChoice -gt 3) {
    Write-Host "1. View the User Account Expire Date"
    Write-Host "2. Set the User Account Expire Date"
    Write-Host "3. Exit"

    [int]$userMenuChoice = Read-Host "Please choose an option"
    switch ($userMenuChoice) {
      1{$useraccount = Read-Host -prompt "Please input an user account"
        Get-ADUser -Identity $useraccount -Properties AccountExpirationDate | Select-Object -Property SamAccountName, Name, AccountExpirationDate
       Write-Host "";
       Write-Host "";
        }
      2{$useraccount = Read-Host -prompt "Please input an user account"
        [Datetime]$expiredatetime = Read-Host -prompt "Please input the user expire date and time (DateFormat: MM/dd/yyyy)" 
        Set-ADAccountExpiration -Identity $useraccount -DateTime $expiredatetime
       Write-Host "";     
       Write-Host "";
        Get-ADUser -Identity $useraccount -Properties AccountExpirationDate | Select-Object -Property SamAccountName, Name, AccountExpirationDate
       Write-Host "";     
       Write-Host "";

       }
      3{Write-Host "Exit";Exit
       }
      default {Write-Host "Incorrect input" -ForegroundColor Red
      Write-Host "";
      Write-Host "";
      }
    }
  }
} while ( $userMenuChoice -ne 3 )```



【问题讨论】:

    标签: powershell datetime active-directory


    【解决方案1】:

    使用Clear-ADAccountExpiration 将帐户设置为永不过期。

    此外,您不能在 Read-Host 调用中直接使用 [datetime] 类型约束变量,因为不支持将空字符串 ('') 转换为 [datetime](您看到的错误)。

    这是解决此问题的一种方法:

    do {
      # Read the input as a string first...
      $expiredatetimeStr = Read-Host -prompt "Please input the user expiration date and time (DateFormat: MM/dd/yyyy) or just press Enter to make the account non-expiring"
      # ... and then try to convert it to [datetime]
      if ($expiredatetime = $expiredatetimeStr -as [datetime]) {
        Set-ADAccountExpiration -Identity $useraccount -DateTime $expiredatetime
      } 
      elseif ($expiredatetimeStr.Trim() -eq '') {  # empty input -> no expiration
        Clear-ADAccountExpiration -Identity $useraccount
      }
      else { # invalid input
        Write-Warning 'Please enter a valid date.'
        continue
      }
      break
    } while ($true)
    

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      相关资源
      最近更新 更多