在PowerShell中获取当前计算机的可分辨名称,而不使用ActiveDirectory模块

Sco*_*ain 6 powershell active-directory

我有一个脚本,我需要找到完整的专有名称(CN=MyComputer, OU=Computers, DC=vw, DC=local在计算机的运行它),但是我不能保证该ActiveDirectory模块将可在此脚本将运行在所有计算机上.有没有办法在不使用的情况下获取当前计算机的完整专有名称Get-ADComputer $Env:COMPUTERNAME


以防万一,这是一个XY问题,我所要做的是将计算机移动到特定的OU,但我需要一个方式来获得我上运行的计算机的ASDI项目.

[ADSI]$computer = ("LDAP://" + $localDN)
if($Production)
{
    [ADSI]$destination = 'LDAP://ou=Production,ou=Computers,ou=VetWeb,dc=vw,dc=local'
    $computer.MoveTo($destination);
}
else
{
    [ADSI]$destination = 'LDAP://ou=Test,ou=Computers,ou=VetWeb,dc=vw,dc=local'
    $computer.MoveTo($destination);
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*evy 10

试试这个(需要v2):

$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
([adsisearcher]$filter).FindOne().Properties.distinguishedname
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.您还可以使用以下命令获取计算机对象:([adsisearcher] $ filter).FindOne().GetDirectoryEntry() (2认同)

joe*_*ren 5

请小心使用 ADSIsearcher 方法。如果同一林中的不同域中有两台具有相同名称的计算机(导致我执行返回本文的搜索的问题),则此方法不能保证返回正确的计算机。此方法将简单地在 AD 中搜索具有由 ComputerName 环境变量返回的名称的计算机。如果您处于林中具有多个域的环境中,则需要确保交叉引用计算机加入的域。

主持人,这确实应该是对 Shay Levy 的答案的评论,但我无法发表评论,因为我是新人。