0

サイト名を含む CSV を使用して Active Directory 環境にサイトをインポートしたいと考えています。

私のCSV入力の例:

New York
Dallas
New Jersey

実際の作成プロセスが発生する前に、まずサイトの存在を確認するスクリプトを作成したいと考えています。ただし、2 つの配列の入力をチェックするのに問題があります。

#Clear process
$ADsites = ""
$SitesFilter = ""
$CSV = ""

[array] $ADSites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites 

$csv=Import-Csv c:\sites.csv -header "Site"

#Filtering the Sitenames
Foreach ($ADSite in $ADSites) {
    [array] $SitesFilter += $ADSite.Name
}

$CSV | Foreach-Object {
    if (??? -eq $_.Site) {
        Write-Host "Site" $_.Site "already exists" 
    } else {
        Write-Host "Site" $_.Site "is not found"
    }
}

$SitesFilter配列の内容をCSV ファイルのサイト名と比較するにはどうすればよいですか?

4

3 に答える 3

2

以下のスクリプトが役立つことを願って-inいます。オブジェクトが配列内にあるかどうかを判断できるを使用する必要があります。

[array] $ADSites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites 

$csv=Import-Csv c:\sites.csv -header "Site"

#Get an site name string array
$SitesFilter = @($ADSites | %{"$($_.Name)"}) 

$CSV | Foreach-Object {
    if ($SitesFilter -contains $_.Site ){
                Write-Host "Site $($_.Site) already exists" 
    } Else { Write-Host "Site $($_.Site) is not found" }
}
于 2013-03-09T11:57:32.890 に答える
0
$array1 = '1','2','3'
$array2 = '2','3','4'
compare $array1 $array2
get-help compare-object -full

お役に立てれば

于 2013-03-10T06:28:33.940 に答える
0

BobLobLaw の回答には興味深いアイデアがありますが、残念ながら不完全すぎて実際には使用できません。私はそれに2つの問題があります:

  • Import-Csvカスタムオブジェクトの配列を生成しますが、OP$SitesFilterは文字列の配列です。Compare-Object比較されたアイテムが同じタイプでない限り、常にすべてのアイテムが異なるものとして報告されます。
  • Compare-Objectつまり、AD に存在しないサイトと、AD に存在するが CSV にリストされていないサイトの両方で違いが報告されます。OP が AD にまだ存在しないサイトのみを必要とする場合は、出力を でフィルタリングする必要がありますSideIndicatorInputObjectただし、とSideIndicatorを同時に展開することはできませんselect -Expand

このような何かがトリックを行うかもしれません:

$csv = Import-Csv "c:\sites.csv" -Header "Site" | % { $_.Site }

compare $csv $SitesFilter | ? {
  (select -Input $_ -Expand SideIndicator) -eq "<="
} | select -Expand InputObject

どのサイトが存在するか存在しないかを報告するには、次のようなことができます。

compare $csv $SitesFilter | % {
  if ( (select -Input $_ -Expand SideIndicator) -eq "<=" ) {
    "Site '{0}' doesn't exist." -f (select -Input $_ -Expand InputObject)
  } else {
    "Site '{0}' already exists." -f (select -Input $_ -Expand InputObject)
  }
}

またはselect、情報をカスタム オブジェクトに入れることもできます。

$site   = { select -Input $_ -Expand InputObject }
$exists = { (select -Input $_ -Expand SideIndicator) -ne "<=" }

compare $csv $SitesFilter `
  | select @{n='Site';e=$site},@{n='Exists';e=$exists} `
  | % {
    if ( $_.Exists ) {
      "Site '{0}' exists." -f $_.Site
    } else {
      "Site '{0}' doesn't exist." -f $_.Site
    }
  }
于 2013-03-10T11:54:11.830 に答える