0

我在让这段代码在 TS 环境中工作时遇到了很多麻烦。

在 Windows 环境中,它工作得很好。通过谷歌搜索此代码,您会发现几乎所有变体在 Windows 中都可以正常工作。但是,在任务序列中,这些变体只会产生不同的错误消息,说明计算机无法移动的原因。

  1. 未指定的错误
  2. 指定的域不存在或无法联系
  3. 未设置为对象的对象实例

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]
}
4

1 回答 1

0

这是定义,ADSI很重要:

PS C:\> $computer.psbase.MoveTo

OverloadDefinitions
-------------------
void MoveTo(adsi newParent)
void MoveTo(adsi newParent, string newName)  

你可以试试这个,在 $result = $search.findall() 之后:

$computer = [ADSI]$result.path
$computer.psbase.Moveto( [ADSI]LDAP://ou=here,ou=goes,ou=it,dc=sweet,dc=domain,dc=com )
于 2017-11-03T07:02:47.763 回答