2017-11-03 8 views
0

このコードをTS環境で使用するには、多くの問題があります。PowerShellを使用してOSD内の別のOUにコンピュータを移動する

Windows環境からは、素晴らしい動作します。このコードのgoogle検索で見つけられるばかりのバリエーションは、Windowsでうまくいきます。しかし、タスクシーケンスでは、これらのバリエーションは、コンピュータを移動できない理由について異なるエラーメッセージを生成します。

  1. 未指定のエラー
  2. 指定されたドメインが存在しないか、

オブジェクトに設定されていないオブジェクトの

  • インスタンスを接続できませんでしたどちらか私は何かが起こったときにされていることを感じます私たちはpsbase.MoveTo()メソッド呼び出しに行きます。その時点までは、妥当なオブジェクトのように見えるものを印刷することができます。言い換えれば、彼らはnullか何かではありません。

    次にpsbase.MoveTo()はいいえ。

    例コード。ここで

    $logFile = "MoveComputerLog.txt" 
    
    # Domain Credentials 
    $account = "domain\osdaccount" 
    $password = "thepassword" 
    
    function logMessage { 
        param ([string]$logstring) 
    
        Write-Host $logstring 
    
        Add-content $logFile -value $logstring 
    } 
    
    
    $computerName = "COMPUTERNAME" 
    
    
    logMessage "computerName: $computerName" 
    
    $root = "LDAP://sweet.domain.com" 
    $domain = New-Object System.DirectoryServices.DirectoryEntry($root, $account, $password) 
    $search = New-Object System.DirectoryServices.DirectorySearcher($domain) 
    
    $search.filter = "(&(objectClass=computer)(name=$computerName))" 
    
    $result = $search.findall() 
    
    
    $computerDN = $result.Properties.Item("DistinguishedName") 
    
    logMessage "DN: $computerDn" 
    
    
    $computer = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$computerDN", $account, $password) 
    
    logMessage "Computer: $computer" 
    
    
    $destination = "LDAP://ou=here,ou=goes,ou=it,dc=sweet,dc=domain,dc=com" 
    $ou = New-Object System.DirectoryServices.DirectoryEntry($destination, $account, $password) 
    
    
    try { 
        # "The specified domain couldn't be connected or doesn't exist." 
        $computer.psbase.MoveTo($ou.Path) 
    
    } catch { 
        Write-Host "Encountered error while moving $computerName" 
    
        logMessage $error[0] 
    } 
    
  • 答えて

    0

    は、定義され、ADSIは重要です:

    PS C:\> $computer.psbase.MoveTo 
    
    OverloadDefinitions 
    ------------------- 
    void MoveTo(adsi newParent) 
    void MoveTo(adsi newParent, string newName) 
    

    あなたはrigth = $ search.findall()$結果の後に、これを試すことができます。

    $computer = [ADSI]$result.path 
    $computer.psbase.Moveto([ADSI]LDAP://ou=here,ou=goes,ou=it,dc=sweet,dc=domain,dc=com) 
    
    +0

    ありがとうございましたが、同じエラーが発生します。質問に投稿したコードはWindowsで動作します。 PE環境では、何かが異なっています。 – Jeremy

    関連する問題