請教高手
#查詢指定OU符合條件的用戶,這裡篩選了未設定密碼永不過期以及帳號是啟用狀態的用戶
$AllUser = Get-ADUser -searchbase "dc=flytech,dc=com,dc=tw" -Filter 'PasswordNeverExpires -eq "false" -and enabled -eq "true"' | % {$.SamAccountName}
#進入循環
foreach ($User in $AllUser){
#取得上次設定密碼時間
$PwdLastset = Get-ADUser $User -Properties passwordlastset | % {$.passwordlastset}
#計算過期日期,這裡是90天過期
$PwdLastday = ($PwdLastset).AddDays(90)
#取得電腦目前日期,確保執行此腳本的電腦日期準確
$Now = Get-Date
#計算密碼還剩多少天過期
$ExpireDays = ($PwdLastday - $Now).Days
#執行if語句,這判斷過期日期是否小於等於14且大於0,如果為真則發送郵件
if($expire_days -le "14" -and $expire_days -gt "0"){
$DN = Get-ADUser $User -Properties Displayname | % {$.Displayname}
$EmailAddress = Get-ADUser $User -Properties mail | % {$.mail}
$EmailSubject = "您的密碼即將過期"
$Emailbody=
"親愛的 $chineseusername 同仁 :
您的網域帳戶密碼即將在 $expire_days 天後過期, $pwdlastday 之後您將無法登入電腦、無法使用無線網路、無法使用郵件、無法使用BPM,請您盡快更改。
重設密碼過程請遵循以下原則:
執行指令碼 出現以下錯誤可否高手指導
**不可在值為 Null 的運算式上呼叫方法。
位於 C:\temp\ADAccountPassword_V03.ps1:8 字元:1
+ CategoryInfo : InvalidOperation: (:) [],RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull**
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "samaccountname", @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} | Where-object Expirydate -le (get-date).adddays(15) | Select-Object -Property "samaccountname" > AccountList.txt
我作法是一次查詢匯出結果
再分別通知
第一行就出錯了,就是上面留言的提到錯誤的內容了
請用編輯器去寫或者檢查,就算是複製網路上的程式碼也一樣
內建的 Powershell ISE 也可以檢查到這個錯誤
錯誤的語法 | % {$.SamAccountName}
正確的語法 | % {$_.SamAccountName}
第一行出錯沒有任何資料進入$AllUser的變數內
那之後的程式碼拉不到資料,當然會出錯,
那系統給的錯誤訊息 不可在值為 Null 的運算式上呼叫方法 一點都不奇怪