Переменные в модулях не отображаются - PullRequest
0 голосов
/ 25 октября 2018

У меня проблемы с пониманием поведения моего сценария.Я создал модуль, который имеет метод для получения и фильтрации компьютеров в AD, который выглядит следующим образом:

function Get-FilteredADComputers {
    $global:site = Read-Host '
Which site?

site1
site2

                '
    Clear-Host
    $global:computerType = Read-Host '
Client
Server
'

    $global:OU = "OU=$global:computerType,OU=Devices,OU=MyOU,OU=$global:site,OU=My OU,DC=mydomain,DC=.com"
    $global:computerSelection = Get-ADComputer -Filter * -SearchBase $global:OU | select -ExpandProperty "Name" | sort
    $global:computerSelection
    $global:computers = @()

    $global:filter = Read-Host '
Input computer filter. For all computers use a single *.'
    $global:computers += $global:computerSelection | where {$_ -like "$global:filter"}
    $global:computers

    return $global:computers
}

Этот модуль импортируется в мой основной скрипт следующим образом:

Import-Module "$PSScriptRoot\Modules\SetInfo\SetInfo.psm1" -DisableNameChecking -Force

Теперь, когда я вызываю этот метод, он должен выводить во время выполнения, какие компьютеры он находит, и это работает, если я вызываю метод без назначенной ему переменной, например: Get-FilteredADComputers, когда метод запускается, он выводит все компьютеры, на которых он работаетнаходит как надо.

Однако, если я вызываю метод и присваиваю его переменной this:

$filteredList = Get-FilteredADComputers, во время выполнения он ничего не выводит.

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете значительно упростить то, что делаете.Нет необходимости выбирать ВСЕ компьютеры с каждым запросом:

function Get-FilteredADComputers
{
    [CmdletBinding()]
    [OutputType([System.String[]])]
    param
    (
        [Parameter(Position = 0, Mandatory)]
        [ValidateSet('site1', 'site2')]
        [System.String]
        $Site,

        [Parameter(Position = 1, Mandatory)]
        [ValidateSet('Client', 'Server')]
        [System.String]
        $ComputerType,

        [Parameter(Position = 2, Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]
        $Filter
    )

    $OU = "OU=$ComputerType,OU=Devices,OU=MyOU,OU=$Site,OU=My OU,DC=mydomain,DC=com"
    (Get-ADComputer -Filter "Name -like '$Filter'" -SearchBase $OU).Name | Sort-Object
}

При этом я не вижу, что вы испытываете.Вы на самом деле возвращаете $computers дважды в вашем примере сценария -

$computers
return $computers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...