需要在脚本中添加广告位置信息

时间:2019-05-03 10:06:31

标签: powershell

我有一个脚本,用于从林中检索AD站点和子网信息。还需要在脚本中添加位置详细信息

该脚本经过测试,可以在其中提供站点和子网详细信息。

$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext

$siteContainerDN = ("CN=Sites," + $configNCDN)

$siteObjs = Get-ADObject -SearchBase $siteContainerDN -filter { objectClass -eq "site" } -properties "siteObjectBL", name

foreach ($siteObj in $siteObjs) {

    $subnetArray = New-Object -Type string[] -ArgumentList $siteObj.siteObjectBL.Count

    $i = 0

    foreach ($subnetDN in $siteObj.siteObjectBL) {

        $subnetName = $subnetDN.SubString(3, $subnetDN.IndexOf(",CN=Subnets,CN=Sites,") - 3)

        $subnetArray[$i] = $subnetName

        $i++

    }

    $siteSubnetObj = New-Object PSCustomObject | Select SiteName, Subnets

    $siteSubnetObj.SiteName = $siteObj.Name

    $siteSubnetObj.Subnets = $subnetArray

    $file = "C:\temp\1.csv"

    Out-File $file -encoding ASCII -input $siteSubnetObj -append
} 

我希望也可以使用该脚本提取广告位置的详细信息。

2 个答案:

答案 0 :(得分:1)

您可以使用Get-ADReplicationSite命令来缩短此脚本。我还将考虑使用Export-Csv,因为您正在将对象输出到文件。

Get-ADReplicationSite -Filter * -Properties Subnets,Location |
   Select @{n='SiteName';e={$_.Name}},
   @{n='Subnets';e={$_.Subnets -replace "^CN=(.*?),CN=Subnets,.*$",'$1'}},Location |
   Export-Csv -Path 'C:\temp\1.csv' -encoding ASCII -NoTypeInformation

Export-Csv将默认创建一个逗号分隔的文件(分隔符是可更改的),其中第一行(标题)是对象的属性名称。每一行将包含每个属性的逗号分隔值。属性和值的列将完美对齐。

如果每个站点有四个以上的子网,仅使用Out-File方法而不更改任何其他内容将切断子网值。您需要将$formatenumerationlimit设置为大于4或-1的值以进行无限制设置,或确保输出不是表格格式。如果您不使用Export-Csv,则使用此文件将更加困难,因为项目属性及其值之间不会存在一致的定界符。

如果您确切解释了什么,我可以在其中添加位置详细信息。

答案 1 :(得分:0)

我不知道您在“位置”中指的是什么,所以在那里无济于事。 另外,我知道文件输出更易于阅读,并且很可能被人类用作报告使用,但是您必须考虑到Out-file在重定向到文件时将默认为屏幕宽度,因此将是否保存取决于该宽度(而不是固定值,例如4)。要扩大输出宽度,您可以使用-width参数

$Something | out-file $file -width 600

或设置默认宽度:

 $PSDefaultParameterValues=@{"Out-File:Width"="600"}

请注意,大量药物可能会产生不良副作用。