我是编程的新手,我决定给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
}
任何想法或意见将不胜感激!即使它只是我可以如何清理现有的“代码”。
答案 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时,请一次执行一行。不要尝试编写完整的脚本然后进行调试。写一行来获取数据。让它工作。然后操纵一下数据。再多一点。如果您想要它,请担心将数据放在某处。