Нужна помощь по включению нескольких переменных в foreach против этого скрипта - PullRequest
0 голосов
/ 18 июня 2019

Я новичок в powershell и пытаюсь изменить существующий скрипт для запуска нескольких переменных (доменов) в цикле foreach. Фрагмент сценария ниже.

$ DomainIdentities - это переменная, которая будет определять $ TargetDomain, с которым работает скрипт. Допустим, у меня есть пара доменов, domainA.lab.local и domainB.lab.local, каков наилучший способ зациклить эти два в foreach для работы с обоими доменами?

    Write-Host 'Gathering and analyzing target domain information...'
    Import-Module ActiveDirectory
    Import-Module GroupPolicy

    $TargetDomain = Get-AdDomain -Identity $DomainIdentities | Select Name,DNSRoot,NetBIOSName,DomainMode,PDCEmulator

    Write-Host ''
    Write-Host '   Domain NetBIOS name: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.NetBIOSName
    Write-Host '   Domain DNS name: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.DNSRoot 
    Write-Host '   PDC emulator: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.PDCEmulator
    Write-Host '   DomainMode: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.DomainMode
    Write-Host '   Checking domain functional mode is ''Windows2008Domain'' or higher.....' -NoNewline

    $Status | Add-Member -MemberType NoteProperty -Name 'DomainModePassed' -Value (!(($TargetDomain.DomainMode -eq 'Windows2000Domain') -or ($TargetDomain.DomainMode -eq 'Windows2003InterimDomain') -or ($TargetDomain.DomainMode -eq 'Windows2003Domain')))
    If ($Status.DomainModePassed) {Write-Host -ForegroundColor Green 'PASSED'} 
    Else {Write-Host -ForegroundColor Red 'FAILED'}

    Write-Host ''

1 Ответ

1 голос
/ 18 июня 2019

Объявите Domains как параметр, который принимает несколько строковых значений в верхней части вашего скрипта:

param(
    [string[]]$Domains
)

Write-Host 'Gathering and analyzing target domain information...'
Import-Module ActiveDirectory
Import-Module GroupPolicy

foreach($Domain in $Domains){
    $TargetDomain = Get-ADDomain -Identity $Domain | Select Name,DNSRoot,NetBIOSName,DomainMode,PDCEmulator

    Write-Host ''
    Write-Host '   Domain NetBIOS name: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.NetBIOSName
    Write-Host '   Domain DNS name: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.DNSRoot 
    Write-Host '   PDC emulator: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.PDCEmulator
    Write-Host '   DomainMode: ' -NoNewline; Write-Host -ForegroundColor Cyan $TargetDomain.DomainMode
    Write-Host '   Checking domain functional mode is ''Windows2008Domain'' or higher.....' -NoNewline

    $Status | Add-Member -MemberType NoteProperty -Name 'DomainModePassed' -Value (!(($TargetDomain.DomainMode -eq 'Windows2000Domain') -or ($TargetDomain.DomainMode -eq 'Windows2003InterimDomain') -or ($TargetDomain.DomainMode -eq 'Windows2003Domain')))
    If ($Status.DomainModePassed) {Write-Host -ForegroundColor Green 'PASSED'} 
    Else {Write-Host -ForegroundColor Red 'FAILED'}

    Write-Host ''
}

Затем передайте доменные имена сценарию следующим образом:

.\path\to\script.ps1 -Domains ad.contoso.com,ad.fabrikam.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...