使用set-adcomputer为description属性添加前缀

时间:2014-04-29 06:40:50

标签: powershell-v3.0

我是编程的新手,我决定给PowerShell一个机会,这也是我的第一篇文章,所以我不确定要提供多少信息,如果我已经过火,请提前抱歉。< / p>

我的问题是尝试识别我们在OU内部管理的活动目录工作站列表,该工作站用于跨业务的多个区域的工作站(每个区域都有自己的部门,但我们共享相同的AD林\ OU)并修改description属性(我设法使用我们的机器上的dhcp vlan的csv导出和一些帮助/祈祷/观看mva的东西)。

我似乎无法解决的问题是我想保留工作站的现有描述,但是前缀(或者如果它更容易附加)它带有一个新字符串(即-Description(“ORG-STACKOVERFLOW” - ))

我把下面的剧本拼凑在一起,用了一些基本的评论,对不起,如果它看起来很糟糕/不标准。基本上我正在尝试使用的是:

Set-ADComputer $item.DNSHostName.Replace(".org.com.au","") -Description "ORG-STACKOVERFLOW" -Verbose -confirm

我认为我可以使用一种方法来使用-description属性,但是我没有找到它的方法。我唯一想到的是以某种方式创建另一个变量来存储现有描述,然后将其附加到上面的命令,但随后我的大脑开始融化......

#Need to try and figure out if dhcp cmdlet can be used to scrape vlan for 
#this info, rather than use a manually generated list
$dhcp_data=import-csv -path C:\temp\<dhcp.csv> | sort DNSHostName

#Enter query after -match; ie "stackoverflow001":
$enames = $dhcp_data | Where-Object{$_.DNSHostName -match "stackov*"} 
$enames | Format-Table -AutoSize

#This function scrapes the AD OU for objects to update.
$ad_data = Get-ADComputer -Filter * -SearchBase "OU=desktops,OU=workstations,OU=dept,DU=org,DC=com,DC=au" -Properties description | sort DNSHostName

#This function compares the dhcp list against the freshly generated list of AD objects
#looking at the DNSHostName column in both tables and generating a new table with matches
#in the $result variable. The $result1 variable filters the list again to only show a list 
#of matches ($results was inclulding empty results for some reason)
$result = Compare-Object $enames $ad_data -Property DNSHostName -IncludeEqual
$result1 = $result | Where-Object {$_.SideIndicator -eq "=="}
$result1


#This function looks at the data in each each row of the DNSHostName column in $result 
#and gives it a new description of "ORG-STACKOVERFLOW" if the data matches the query set 
#here: <{$_.DNSHostName -match "here"}>
ForEach ($item in $result1)
{ 
   Set-ADComputer $item.DNSHostName.Replace(".org.com.au","") -Description "ORG-STACKOVERFLOW" -Verbose -confirm
}

任何想法或意见将不胜感激!即使它只是我可以如何清理现有的“代码”。

1 个答案:

答案 0 :(得分:0)

如果您只想获得描述,可以使用:

(Get-ADComputer $hostName -Properties Description).Description

Get-ADComputer $hostName -Properties Description | Select-Object -ExpandProperty Description

所以,将它存储在一个变量中:

$description = (Get-ADComputer $hostName -Properties Description).Description

你也许可以用以下内容完成所有这些:

Set-ADComputer $hostName -Description "$((Get-ADComputer $hostName -Properties Description).Description)ORG-STACKOVERFLOW") -Verbose -confirm

但它不容易阅读,所以为什么要这么麻烦?

当您开始使用PowerShell时,请一次执行一行。不要尝试编写完整的脚本然后进行调试。写一行来获取数据。让它工作。然后操纵一下数据。再多一点。如果您想要它,请担心将数据放在某处。