2012-06-21 15 views
5

Tôi có một tập lệnh cần tìm Tên đầy đủ (CN=MyComputer, OU=Computers, DC=vw, DC=local) của máy tính đang chạy, tuy nhiên tôi không thể đảm bảo rằng mô-đun ActiveDirectory sẽ là có sẵn trên tất cả các máy tính mà tập lệnh này sẽ được chạy. Có cách nào để nhận tên đầy đủ của máy tính hiện tại mà không sử dụng Get-ADComputer $Env:COMPUTERNAME không?Nhận tên phân biệt của máy tính hiện tại trong PowerShell mà không cần sử dụng mô-đun ActiveDirectory


Chỉ trong trường hợp này là một vấn đề XY, những gì tôi đang cố gắng làm là di chuyển máy tính đến một OU cụ thể, nhưng tôi cần một cách để có được sự xâm nhập ASDI cho máy tính Tôi đang chạy trên.

[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); 
} 

Trả lời

9

Hãy thử điều này (yêu cầu v2):

$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))" 
([adsisearcher]$filter).FindOne().Properties.distinguishedname 
+0

Cảm ơn bạn, điều đó hoạt động hoàn hảo. Trong thực tế, tôi thậm chí không cần Properties.distingushedname, tôi vừa thay đổi dòng thứ hai thành '$ computer = [ADSI] (([adsisearcher] $ filter) .indOne(). Path)' và tôi có thể sử dụng nó với Lệnh 'MoveTo'. –

+2

Cảm ơn. Bạn cũng có thể nhận được đối tượng máy tính với: ([adsisearcher] $ filter) .indOne(). GetDirectoryEntry() –

+0

Điều này trả về null cho tôi. –

-1

Tôi nghĩ rằng bạn có thể lấy nó từ môi trường bằng cách sử dụng:

$computer = gc env:computername 

Hoặc là điều này chính xác những gì bạn không muốn? Tôi khủng khiếp với powershell.

+0

Không có tên chung của máy tính, tôi cần ** tên phân biệt ** của nó, tôi cần "CN = MyComput er, DC = example, DC = com ", câu trả lời của bạn chỉ trả về" MyComputer " –

0

Hãy thử một cái gì đó như thế này:

$de = New-Object System.DirectoryServices.DirectoryEntry 
$ds = New-Object System.DirectoryServices.DirectorySearcher 
$ds.SearchRoot = $de 
$ds.Filter = "(&(objectCategory=computer)(objectClass=computer)(samAccountName=($($env:ComputerName))$))" 
$ds.SearchScope = "SubTree" 

$r = $ds.FindOne() 

$r.Path 
+0

Tôi thử nó nhưng' $ r' là null sau 'FindOne()', 'FindAll()' cũng không trả về kết quả nào. Bộ lọc mà tôi nhận được sau khi mở rộng biến là '(& (objectCategory = computer) (objectClass = computer) (samAccountName = (VWDEV) $))' có đúng với bạn không? Tôi không hoàn toàn lên đến tốc độ trên LDAP queires nhưng nó có vẻ kỳ lạ với tôi để có một dấu ngoặc đơn giữa tên máy tính và $ –

+0

Không, không nên có parens xung quanh VWDEV.Thay đổi bộ lọc thành '" (& (objectCategory = computer) (objectClass = computer) (samAccountName = $ ($ env: ComputerName) $)) "' –

+0

Không ai trong số đó làm việc cho tôi. –

3

Lệnh Get-ADComputer (PS ver 2.0) có thể giúp đỡ.

PS:\> $(Get-ADComputer 'mycomputer').distinguishedName 

Tên máy tính phải là tên viết tắt, như $ env: COMPUTERNAME.

+1

FYI: yêu cầu RSAT trên Windows 7 –

1

Hãy cẩn thận với phương pháp ADSIsearcher. Nếu bạn có hai máy tính có cùng tên trong các miền khác nhau trong cùng một khu rừng (vấn đề khiến tôi thực hiện tìm kiếm trả về bài viết này), phương pháp này không được đảm bảo trả về đúng. Phương thức này sẽ đơn giản tìm kiếm trong AD cho một máy tính với tên được trả về bởi Biến môi trường ComputerName. Bạn cần đảm bảo tham chiếu chéo miền mà máy tính được nối nếu bạn ở trong một môi trường có nhiều tên miền trong một khu rừng.

Người kiểm duyệt, điều này thực sự là một nhận xét cho câu trả lời của Shay Levy, nhưng tôi không thể đưa ra nhận xét vì tôi mới.

+0

Chào mừng bạn đã tham gia. Khi bạn đạt đến 50 danh tiếng, bạn sẽ có thể nhận xét ở khắp mọi nơi. Cảm ơn bạn đã bình luận. – Onots

0

Hãy thử này ... Dễ hiểu và dễ nhớ cũng .....

$cn = Read-Host "Nhập ComputerName"

$cnObj = Get-ADComputer $cn

$ou = $cnObj.distinguishedname

$ou

+1

Không phải là bộ phận Get-ADComputer của mô-đun thư mục hoạt động có thể hoặc không được cài đặt trên hệ thống (toàn bộ điểm của câu hỏi là có cách luôn hoạt động và không phụ thuộc vào các mô-đun "tùy chọn") –

Các vấn đề liên quan