模块中的变量不显示

时间:2018-10-25 13:54:32

标签: powershell

我无法理解脚本的行为。我创建了一个模块,该模块具有用于获取和过滤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,则该方法有效,当方法运行时它会输出它找到的所有计算机。

但是,如果我调用该方法并将其分配给以下变量:

$filteredList = Get-FilteredADComputers,在执行期间,它不会输出任何内容。

1 个答案:

答案 0 :(得分:0)

您可以大大简化您的工作。不必为每个查询选择所有计算机:

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