Powershell 在Get ADComputer中修改DifferentizedName的输出
我的powershell知识相当基础。无论如何,我正在尝试制作一个脚本,它将在一台Get-ADComputer中转换DiscrimitedName的输出 在正常情况下,使用Get-ADComputer查询服务器的结果DifferentizedName如下所示,具体取决于OU的结构:Powershell 在Get ADComputer中修改DifferentizedName的输出,powershell,Powershell,我的powershell知识相当基础。无论如何,我正在尝试制作一个脚本,它将在一台Get-ADComputer中转换DiscrimitedName的输出 在正常情况下,使用Get-ADComputer查询服务器的结果DifferentizedName如下所示,具体取决于OU的结构: CN=<servername>,OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=<something>,DC=com 现在进入棘手的部分。在“Pa
CN=<servername>,OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=<something>,DC=com
现在进入棘手的部分。在“ParentContainer I want to have all”DC=“values”列中,删除所有值,然后切换OU,使其看起来与下面的类似,而不是上面的
名字 父容器------- ---------------
服务器1 OU=0180,OU=服务器,OU=其他
服务器2 OU=管理员,OU=服务器,OU=DRA8
服务器3 OU=0180,OU=服务器,OU=其他
服务器4 OU=0180,OU=服务器,OU=其他
服务器5 OU=4611,OU=服务器 这样做的原因是,更容易看到OU结构以及服务器放置在CSV文件中的OU 有可能吗?还是我在深水区 问候
Torbjorn Persson您可以编写内联代码,但为了简化操作,请导入我编写的Format OU函数,然后将您的选择代码行调整为:
select name, @{n='ParentContainer';e={Format-OU -OUString $_.distinguishedname}}
格式OU功能:
Function Format-OU()
{
param
(
[String]$OUString
)
$OUString = $OUString.Substring(0,$OUString.IndexOf("DC")-1)
$OUArray = $OUString.Split(",")
$Result = ""
$Count = 1
$OUArray | % {IF ($Count -eq 1) {$Result = $Result.Insert(0,"$_")} ELSE {$Result = $Result.Insert(0,"$_,")};$Count++}
Return $Result
}
您可以编写内联代码,但为了简化操作,请导入我编写的Format OU函数,然后将选择代码行调整为:
select name, @{n='ParentContainer';e={Format-OU -OUString $_.distinguishedname}}
格式OU功能:
Function Format-OU()
{
param
(
[String]$OUString
)
$OUString = $OUString.Substring(0,$OUString.IndexOf("DC")-1)
$OUArray = $OUString.Split(",")
$Result = ""
$Count = 1
$OUArray | % {IF ($Count -eq 1) {$Result = $Result.Insert(0,"$_")} ELSE {$Result = $Result.Insert(0,"$_,")};$Count++}
Return $Result
}
尝试一下。拆分DN,第一个元素将为您提供服务器名称。然后使用range运算符从上到下获取所有其他元素,这些元素不以“dc=”开头,然后加入,然后返回:
Get-ADComputer -Filter * | ForEach-Object{
$dn = $_.DistinguishedName.Split(',')
New-Object PSObject -Property @{
Name = $dn[0] -replace '^cn='
ParentContainer = $dn[$dn.length..1] -notlike 'dc=*' -join ','
}
}
顺便说一句,您可能需要检查CanonicalName属性。它可能会以类似的方式为您提供所需的输出,而无需操作DN。尝试一下。拆分DN时,第一个元素将为您提供服务器名称。然后使用range操作符从上到下获取所有其他不以“d”开头的元素c='并连接,然后返回:
Get-ADComputer -Filter * | ForEach-Object{
$dn = $_.DistinguishedName.Split(',')
New-Object PSObject -Property @{
Name = $dn[0] -replace '^cn='
ParentContainer = $dn[$dn.length..1] -notlike 'dc=*' -join ','
}
}
顺便说一下,您可能需要检查CanonicalName属性。它可以以类似的方式为您提供所需的输出,而无需操作DN。还有一种可能性:
Get-ADComputer -Filter * | ForEach-Object{
$split = ($dn -split 'CN=|,DC=.+').split(',',2)
New-Object PSObject -property @{
Name=$split[1];ParentContainer=$split[2]}
}
还有一种可能性:
Get-ADComputer -Filter * | ForEach-Object{
$split = ($dn -split 'CN=|,DC=.+').split(',',2)
New-Object PSObject -property @{
Name=$split[1];ParentContainer=$split[2]}
}
没问题,如果它符合你的要求,就把它标记为答案。没问题,如果它符合你的要求,就把它标记为答案。