Powershell (RSAT) を使用して AD のパスワードをリセットする (Win Server 2008)

Powershell (RSAT) を使用して AD のパスワードをリセットする (Win Server 2008)

私はオンラインで見つけた PowerShell スクリプトを使用して、Windows Server 2008 のパスワードを RSAT 経由でリモートで変更するために、win7 CPU を使用しようとしています。現在、Server 2008 と win7 は VM であり、win7 CPU はサーバーにドメイン化されており、PowerShell の Active Directory モジュールを適切に実行できます。私は PowerShell とサーバーの取り扱いにかなり不慣れです (このプロジェクトはインターンシップでのトレーニングです)。このスクリプトをコンパイルしようとすると、エラーが発生します。

import-Module ActiveDirectory
Function Set-AdUserPwd 
{ 
    Param( 
    [string]$user, 
    [string]$pwd 
    ) #end param 
    $oUser = [adsi]"LDAP://$user" 
    $ouser.psbase.invoke("SetPassword",$pwd) 
    $ouser.psbase.CommitChanges() 
} # end function Set-AdUserPwd 
    Set-AdUserPwd -user "cn=test,ou=Users,dc=ifrit,dc=local" -pwd P@ssword1

Exception calling "Invoke" with "2" argument(s): "There is no such object on the server.
"
At line:10 char:25
+     $ouser.psbase.invoke <<<< ("SetPassword",$pwd) 
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

'invoke' は PowerShell 3 だけの機能だと思っていたのですが、TechNet の記事を見ると PowerShell 2 にも適用されると書いてありました。AD に 'test' というアカウントがあるのですが、それが実際の共通名かどうかはわかりません (名: Test、姓: Test、ユーザー ログオン名:[メールアドレス]) この例外は、CN が間違っていることを意味しているのか、それともまったく別の何かなのかを教えていただけますか?

答え1

上記のコメントに同意します。

ADSI (Active Directory Scripting Interface) への参照は削除できます。これは「古い」方法であるためです。Active Directory PS モジュールは、これを置き換えるように設計されています。

したがって、インスタンスでは、まずユーザーオブジェクトが存在することを確認する必要があります。これは、取得ADユーザーコマンドレットは、選択した検索条件に基づいて実行されます。この段階では、検索をかなり厳密にして、1 つのユーザー オブジェクトのみを返すようにすることをお勧めします。例:

try {
    $objUser = Get-ADUser -Filter { Name -eq $user }
    //
    // rest of code here
    //
    }
catch{
    Write-Host "ERROR : Failed to locate user.";
    }

その後、ADAccountPassword の設定パスワードをリセットするためのコマンドレット(ハイパーリンクを参照)。これには、ユーザーの識別名(DN)が必要です。これは、$objユーザー返されるオブジェクト取得ADユーザー電話。

ここではテストできませんが、対話型PowerShellプロンプトから試してみると、どのような属性が存在するかがわかります。$objユーザー物体:

$test = Get-ADUser -Filter { Name -eq "jimbob" }
$test | Get-Member

私は、DNまたは識別名属性ですが、前述したように、ここからテストすることはできません。

ぜひ試してみて、さらにサポートが必要な場合は、進捗状況をここで更新してください...

関連情報