2016-08-01 4 views
0

私は企業でITとして働いています。ユーザーは退席してパスワードを忘れてしまいます。パスワードの有効期限は90日です。会社ポリシーのため、退室中にパスワードを変更することはできません。powershellでアクティブディレクトリモジュールをロードする代わりに

アクティブなディレクトリモジュールをインポートし、最後に設定したパスワードを確認するパワーシェルスクリプトを作成しました。私はpowershellスクリプトをexeに変換しました。

ユーザーがPCからexeファイルを実行すると、エラーが表示され、アクティブディレクトリモジュールをロードできません。

これで、リモートサーバー管理ツールをPCにインストールし、WindowsからAD DSおよびAD LDSツールを有効にすることを推奨するフォーラムがオンラインで確認されました。どちらも管理者権限を必要とし、すべての標準ユーザーのPCでこれを行うことはできません。

すべての単一のPCにRSATをインストールすることなく、このファイルを実行する巧妙な方法はありますか?ありがとうございました。私はスクリプトを変更して、あらゆる種類の管理者アカウントなしですべての標準ユーザーのPCで実行できるようにしていますか?ありがとう

+0

どうすればよいですか?実際のモジュールがないために読み込むことはできませんか? Powershellモジュールをユーザーが利用できるネットワーク共有に配置することをお勧めします。 (sysvolやローカルファイルサーバのように、そこからロードしてください)。 –

+0

パスワードがX日数の90日で期限切れになることを思い出させるスクリプトがありますか良いですか?ユーザーがどれだけ長く離れることにショックを受けましたか – DisplayName

+0

ユーザーはドメインにログインしていますか?はいの場合、なぜすべてのコンピュータでスクリプトを実行する必要がありますか?どのようなスクリプトですか? – Deptor

答えて

1

RSATは必要ありません。 ADSIは何が必要でしょう。

$Days = 20 
$User = [ADSI]"WinNT://$env:USERDNSDOMAIN/$env:USERNAME,user" 
$Flags = $User.UserFlags.psbase.Value 
# Check if password does not expire bit is set. 
If ($Flags -band 65536) 
{ 
    "Password does not expire" 
} 
Else 
{ 
    # Convert from seconds to days. 
    $AgeDays = $User.PasswordAge.psbase.Value/86400 
    $MaxAge = $User.MaxPasswordAge.psbase.Value/86400 
    If ($AgeDays -gt $MaxAge) 
    { 
    "Password Expired" 
    } 
    Else 
    { 
    If (($AgeDays + $Days) -gt $MaxAge) 
    { 
     "Password will expire within $Days days" 
    } 
    Else 
    { 
     "Password is not about to expire" 
    } 
    } 
} 
+1

ありがとうございます。 – user6662097

0

私は passwordenquiry.vsb として、このスクリプトを保存し、共有フォルダに配置し、としてそれにリンクGPOを通じてデスクトップショートカットを押して、この

ようなことを行いますPasswordEnquiry.vbsこれをクリックすると、パスワードが期限切れになったときに通知を受け、スクリプトメッセージを残す前にパスワードを変更するように指示します。

Dim oDomain 
Dim oUser 
Dim maxPwdAge 
Dim numDays 
Dim warningDays 
warningDays = 11 

Set LoginInfo = CreateObject("ADSystemInfo") 
Set objUser = GetObject("LDAP://" & LoginInfo.UserName & "") 
strDomainDN = UCase(LoginInfo.DomainDNSName) 
strUserDN = LoginInfo.UserName 

Set oDomain = GetObject("LDAP://" & strDomainDN) 
Set maxPwdAge = oDomain.Get("maxPwdAge") 
'======================================== 
' Calculate the number of days that are 
' held in this value. 
'======================================== 
numDays = CCur((maxPwdAge.HighPart * 2^32) + _ 
maxPwdAge.LowPart)/CCur(-864000000000) 
'WScript.Echo "Maximum Password Age: " & numDays 

'======================================== 
' Determine the last time that the user 
' changed his or her password. 
'======================================== 
Set oUser = GetObject("LDAP://" & strUserDN) 
'======================================== 
' Add the number of days to the last time 
' the password was set. 
'======================================== 
whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged) 
fromDate = Date 
daysLeft = DateDiff("d",fromDate,whenPasswordExpires) 

'WScript.Echo "Password Last Changed: " & oUser.PasswordLastChanged 
if (daysLeft < warningDays) and (daysLeft > -1) then 
Msgbox "Password Expires in " & daysLeft & " day(s)" & " at " & whenPasswordExpires & chr(13) & chr(13) & "Change it before you go for leave" & chr(13) & "Press CTRL+ALT+DEL and select the 'Change a password' option", 0, "PASSWORD EXPIRATION WARNING!" 
End if 
'======================================== 
' Clean up. 
'======================================== 
Set oUser = Nothing 
Set maxPwdAge = Nothing 
Set oDomain = Nothing 
関連する問題